每個開發者都該收藏的 20 個正規表達式
最實用的正規表達式速查表——信箱、URL、電話號碼、IP、日期等。複製貼上即可使用。
正規表達式是那種運作時感覺像魔法、不運作時讓人抓狂的工具。我收集實用模式已經好幾年了,這 20 個是我反覆使用的。
收藏這個頁面。你會回來的。
你會忘記的基礎
在看模式之前,快速複習容易混淆的部分:
.比對任意字元(除換行)*表示零個或多個,+表示一個或多個,?表示零個或一個\d是數字,\w是字詞字元,\s是空白^是字串開頭,$是字串結尾()分組,[]定義字元類別,{}設定數量
20 個模式
1. 信箱地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
涵蓋大多數真實信箱。不完全符合 RFC 5322(幾乎沒有什麼完全符合),但處理 99% 的有效地址。
2. URL(HTTP/HTTPS)
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)
比對帶路徑和查詢字串的 HTTP 和 HTTPS URL。
3. 電話號碼(國際)
^\+?[1-9]\d{1,14}$
E.164 格式——國際通用。台灣手機號:^09\d{8}$
4. IPv4 位址
^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$
驗證每個八位元組在 0-255 之間。更簡單的模式會接受像 999.999.999.999 這樣的無效位址。
5. IPv6 位址
^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
基本的完整格式 IPv6。不涵蓋縮寫表示法(::),但處理最常見的格式。
6. 日期(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
ISO 8601 日期格式。驗證月和日的範圍,但不檢查像 2 月 31 日這樣的不可能日期。
7. 時間(HH:MM,24 小時制)
^([01]\d|2[0-3]):([0-5]\d)$
24 小時格式,00:00 到 23:59。
8. 十六進位色碼
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
比對 3 位和 6 位十六進位顏色:#fff、#1a2b3c。
9. 強密碼
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
至少 8 個字元,包含大寫、小寫、數字和特殊字元。根據需要調整最小長度和允許的字元。
10. 使用者名稱
^[a-zA-Z0-9_-]{3,20}$
英數字加底線和連字號,3-20 個字元。
11. HTML 標籤
<\/?[\w\s]*>|<.+[\W]>
比對開始和結束 HTML 標籤。不要用正規表達式來解析 HTML——用專門的解析器。但快速搜尋時可以用。
12. 去除空白
^\s+|\s+$
比對首尾空白。清理作業時很有用。
13. 重複詞
\b(\w+)\s+\1\b
捕捉重複的詞,如 "the the" 或 "is is"。校對文字時很好用。
14. 副檔名
\.([a-zA-Z0-9]+)$
擷取副檔名。分組 1 給出不帶點的副檔名。
15. URL 友善字串(slug)
^[a-z0-9]+(?:-[a-z0-9]+)*$
驗證 URL slug:小寫字母、數字和連字號。不允許連續連字號,不以連字號開始或結束。
16. 信用卡號(基礎)
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})$
偵測 Visa、MasterCard 和 American Express 模式。僅做格式驗證——實際驗證請始終使用付款處理器。
17. UUID v4
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
驗證帶正確版本和變體位元的 UUID 版本 4 格式。
18. JSON 字串值
"(?:[^"\\]|\\.)*"
比對正確跳脫的 JSON 字串值,正確處理反斜線跳脫。
19. CSS 屬性
([a-z-]+)\s*:\s*([^;]+);
擷取 CSS 屬性-值配對。分組 1 是屬性名,分組 2 是值。
20. Markdown 連結
\[([^\]]+)\]\(([^)]+)\)
比對 [文字](url) 連結。分組 1 是連結文字,分組 2 是 URL。
使用正規表達式的建議
從簡單開始逐步建構。 不要試圖一次寫出完美的模式。從最簡單的可用版本開始,然後新增邊界情況處理。
使用測試工具。 部署前一定要用真實資料測試你的模式。邊界情況會讓你驚訝。
加註解。 大多數正規表達式引擎支援詳細模式,可以新增註解和空白來提高可讀性。
知道什麼時候不用正規表達式。 解析 HTML、驗證複雜日期或處理深度巢狀結構——這些用專門的解析器。
你還可以用 文字比對 驗證正規表達式替換是否產生了正確的輸出,或用 字元計數 檢查比對字串的長度。
正規表達式是一項隨練習進步的技能。你不需要記住每條語法規則——只需要知道足夠多來閱讀模式並根據需要修改它們。把這份速查表放在手邊,你就能少花時間在 Stack Overflow 上,多花時間在實際開發上。