首頁資源庫正規表達式驗證模式

正規表達式驗證模式

彙整了 16 個實務中反覆要用到的正規表達式:電子郵件、URL、電話號碼、密碼強度,還有 ID、日期格式,以及兩個用於文字清理的搜尋取代模式。點擊卡片即可複製不帶分隔符和旗標的純模式字串,貼到正規表達式工具的 Pattern 輸入框就能直接用實際文字測試。大多數是驗證整個字串的錨定(^...$)模式,只有移除標籤和空白整理這兩項不帶錨定,方便在較長文字中找出所有相符項目。

打開工具 →
電子郵件地址
電子郵件地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
URL(http/https)
URL(http/https)
^https?://[\w.-]+(?::\d+)?(?:/\S*)?$
電話號碼(E.164 國際格式)
電話號碼(E.164 國際格式)
^\+[1-9]\d{1,14}$
韓國手機號碼
韓國手機號碼
^01[016789]-?\d{3,4}-?\d{4}$
強密碼(8 碼以上,含大小寫字母·數字·符號)
強密碼(8 碼以上,含大小寫字母·數字·符號)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).{8,}$
使用者名稱(3-16 碼,字母·數字·底線)
使用者名稱(3-16 碼,字母·數字·底線)
^[a-zA-Z0-9_]{3,16}$
URL slug(短橫線命名)
URL slug(短橫線命名)
^[a-z0-9]+(?:-[a-z0-9]+)*$
UUID v4
UUID v4
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
十六進位色碼
十六進位色碼
^#(?:[0-9a-fA-F]{3}){1,2}$
移除 HTML 標籤
移除 HTML 標籤
<[^>]+>
IPv4 位址
IPv4 位址
^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$
ISO 8601 日期(YYYY-MM-DD)
ISO 8601 日期(YYYY-MM-DD)
^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
24 小時制時間(HH:MM)
24 小時制時間(HH:MM)
^([01]\d|2[0-3]):[0-5]\d$
美國郵遞區號(ZIP)
美國郵遞區號(ZIP)
^\d{5}(?:-\d{4})?$
信用卡號(僅格式檢查,16 碼每 4 碼一組)
信用卡號(僅格式檢查,16 碼每 4 碼一組)
^\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{1,4}$
折疊連續空白
折疊連續空白
\s{2,}

常見問題

這些模式怎麼用?
點擊卡片會複製不帶分隔符(/)和旗標的純模式字串。貼到正規表達式工具的 Pattern 輸入框,再到測試區輸入文字,相符結果會即時反白顯示。旗標在工具裡另外設定(預設值 g 不會在第一個相符處停下,而是找出所有相符項目)。
電子郵件模式能捕捉所有有效地址嗎?
不能。完整的 RFC 5322 語法相當複雜,寫對需要數十行。實務上通常用這種實用模式過濾明顯的輸入錯誤或空值,再透過寄送驗證信來確認地址是否真實存在。
信用卡模式能驗證卡號是否有效嗎?
不能。這個模式只檢查 16 碼數字是否按每 4 碼一組排列(允許以空格或短橫線分隔),不做檢查碼(Luhn 演算法)驗證,也不適用於 Amex 這類 15 碼卡號。實際有效性檢查應交由金流閘道處理。
密碼模式裡的 (?=...) 是什麼意思?
這是前瞻(lookahead)。它只檢查條件而不消耗字元,因此單一模式就能要求小寫字母、大寫字母、數字、符號同時存在,而不論它們出現的順序。這比強制固定順序的一長串模式清楚得多。
Family Site