跳到主要內容
Tools

正規表達式測試

即時測試 JavaScript 正規表達式:標示符合處、列出群組、預覽取代結果,附語法說明與常用範本。

/g
旗標

0 個字元 · 1 行

符合處

語法說明

輸入正規表達式後,這裡會逐一說明每個部分。

常用範本

這些範本只檢查大致的格式,不保證資料真的有效(例如 Email 是否真的存在),請依需要調整。

  • Email/[\w.+-]+@[\w-]+(?:\.[\w-]+)+/gi
  • 網址(http/https)/https?:\/\/[\w-]+(?:\.[\w-]+)+(?::\d+)?(?:[/?#][^\s]*)?/gi
  • 台灣手機號碼/09\d{2}-?\d{3}-?\d{3}/g
  • 台灣市話/\(?0\d{1,3}\)?[-\s]?\d{3,4}-?\d{4}/g
  • 郵遞區號(3、5 或 6 碼)/(?<!\d)\d{3}(?:\d{2,3})?(?!\d)/g
  • IPv4 位址/\b(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\b/g
  • 日期 YYYY-MM-DD/(?<year>\d{4})-(?<month>0[1-9]|1[0-2])-(?<day>0[1-9]|[12]\d|3[01])/g
  • 時間 HH:MM(:SS)/\b(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?\b/g
  • 十六進位色碼/#(?:[0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{3,4})\b/g
  • UUID/\b[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\b/gi
  • 數字(含千分位、小數)/-?\d{1,3}(?:,\d{3})*(?:\.\d+)?|-?\d+(?:\.\d+)?/g
  • 中文字/\p{Script=Han}+/gu

使用說明

  1. 在「正規表達式」輸入要測試的寫法(不用加前後的 /),勾選需要的旗標,例如 g(找出全部)或 i(不分大小寫)。
  2. 在「測試文字」貼上文字,符合處會即時標示出來,下方表格列出每個符合處與群組的內容。
  3. 需要時在「取代為」輸入取代文字,可用 $1、$<名稱> 插入群組,即時預覽取代結果。
  4. 不熟悉語法時,看「語法說明」逐一了解每個部分,或從「常用範本」選一個開始修改。

常見問題

我的資料會被上傳嗎?

不會。比對在你的瀏覽器中執行,正規表達式與文字都不會離開你的裝置。

用的是哪一種正規表達式?

使用瀏覽器內建的 JavaScript(ECMAScript)正規表達式,結果與在程式中使用 new RegExp() 相同。其他語言(PCRE、Python、Java)大部分語法相同,但有些細節不同,例如 JavaScript 的 \w 只比對英數字與底線,不包含中文字。

怎麼比對中文字?

開啟 u 旗標並使用 \p{Script=Han},例如 \p{Script=Han}+ 會比對連續的中文字;常用範本中有現成的寫法。沒有 u 旗標時,一個 emoji 會被當成兩個字元。

常用範本可以直接用來驗證資料嗎?

範本只檢查大致的格式,例如手機號碼是 09 開頭的 10 位數字,但無法確認號碼是否存在,也無法確認 Email 是否真的存在。正式驗證請搭配其他檢查。

為什麼比對被停止了?

某些寫法(例如 (a+)+$)遇到特定文字時,需要嘗試的組合會呈指數成長,可能讓瀏覽器卡住很久。為了避免頁面當掉,比對在背景執行,超過 3 秒就會自動停止並提示你。改寫成更明確的寫法(例如 a+$)通常就能解決。

位置為什麼和我數的不一樣?

位置是 JavaScript 的字串索引,以 UTF-16 計算:中文字算 1 個位置,但 emoji 等罕用字元算 2 個。這與程式中 match.index 的值相同。

鍵盤快捷鍵

/
搜尋工具(在工具頁會回到首頁的搜尋欄)
?
顯示這個說明
Esc
關閉對話框
Ctrl / ⌘Enter
執行工具的主要動作(支援的工具)

在輸入框中打字時,/ 與 ? 不會觸發快捷鍵。