寫在前面
正則表達式是開發者繞不開的工具,但很少有人會把所有語法背下來。更實用的做法是:理解核心語法,遇到具體場景直接查現成的模式。
本文整理了開發中最高頻出現的 20 個正則表達式,每條附上模式說明和示例,可以直接複製使用。文末附在線驗證工具入口,方便調試。
基礎語法速覽
在看具體模式之前,先確認幾個最常用的元字符:
| 符號 | 含義 |
|---|---|
. |
匹配任意單個字符(換行除外) |
* |
前一個字符重複 0 次或多次 |
+ |
前一個字符重複 1 次或多次 |
? |
前一個字符重複 0 次或 1 次 |
^ |
匹配字符串開頭 |
$ |
匹配字符串結尾 |
\d |
匹配數字,等價於 [0-9] |
\w |
匹配字母、數字、下劃線 |
\s |
匹配空白字符 |
{n,m} |
重複 n 到 m 次 |
[abc] |
匹配括號內任意一個字符 |
(a|b) |
匹配 a 或 b |
一、用戶信息類
1. 郵箱地址
^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
說明: 匹配標準郵箱格式。本地部分允許字母、數字和 ._%+-,域名部分要求有點號分隔,頂級域名至少2位。
示例匹配: user@example.com、hello.world+tag@sub.domain.org
2. 中國大陸手機號
^1[3-9]\d{9}$
說明: 匹配以 1 開頭、第二位爲 3-9 的 11 位手機號,覆蓋目前所有運營商號段。
示例匹配: 13812345678、19911112222
3. 座機號碼(含區號)
^(0\d{2,3})[\-\s]?(\d{7,8})$
說明: 匹配帶區號的座機,區號 3-4 位,號碼 7-8 位,中間可有連字符或空格。
示例匹配: 010-12345678、0571 87654321
4. 中國身份證號(18位)
^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$
說明: 匹配18位身份證。包含省份代碼、出生年份(18xx/19xx/20xx)、月份、日期校驗,末位允許 X。注意這隻做格式校驗,不做校驗位計算。
5. 用戶名(字母數字下劃線)
^[a-zA-Z0-9_]{4,16}$
說明: 常見註冊場景,4-16位,只允許字母、數字、下劃線。可根據需求調整長度區間。
6. 強密碼
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$
說明: 至少8位,必須包含小寫字母、大寫字母、數字、特殊字符各至少一個。使用了前瞻斷言 (?=...)。
二、網絡地址類
7. URL
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)$
說明: 匹配 http 和 https 鏈接,包含路徑、查詢參數、錨點等完整 URL 結構。
示例匹配: https://toolshu.com/regex-visualizer、http://sub.example.com/path?q=1
8. IPv4 地址
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
說明: 精確匹配 0.0.0.0 到 255.255.255.255 範圍內的 IPv4 地址。
示例匹配: 192.168.1.1、255.255.255.0
9. IPv6 地址(簡化版)
^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
說明: 匹配完整展開的 IPv6 地址(不含縮寫形式)。生產環境建議使用更完整的版本。
10. 域名
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$
說明: 匹配標準域名,支持多級子域名,每段最長63字符。
三、日期時間類
11. 日期(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
說明: 匹配標準 ISO 日期格式,對月份和日期範圍做了約束,但不校驗具體月份天數(如2月30日能通過)。
示例匹配: 2024-01-31、2000-12-01
12. 時間(HH:MM:SS)
^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$
說明: 匹配 24 小時制時間,小時 00-23,分鐘秒鐘 00-59。
13. 中文日期(YYYY年MM月DD日)
^\d{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[12]\d|3[01])日$
示例匹配: 2024年3月15日、2000年12月01日
四、內容格式類
14. 整數(含負數)
^-?[1-9]\d*$|^0$
說明: 匹配整數,允許負號,但不允許前導零(01 不匹配)。0 單獨處理。
15. 小數(含負數)
^-?([1-9]\d*|0)\.\d+$
說明: 匹配帶小數點的數字,小數點後必須有數字。不匹配 1.(末尾有點沒有數字)。
16. 中文字符
^[\u4e00-\u9fa5]+$
說明: 匹配純漢字字符串,Unicode 範圍覆蓋常用漢字。
17. 空行
^\s*$
說明: 匹配只含空白字符或完全爲空的行,常用於清理文本時過濾空行。
18. HTML 標籤
<([a-zA-Z][a-zA-Z0-9]*)\b[^>]*>(.*?)<\/\1>
說明: 匹配成對的 HTML 標籤及其內容。注意:用正則解析複雜 HTML 並不可靠,複雜場景建議用 DOM 解析器。
19. 十六進制顏色值
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
說明: 匹配 CSS 顏色值,支持3位和6位簡寫。
示例匹配: #FF5733、#fff
20. 中國郵政編碼
^[1-9]\d{5}$
說明: 匹配6位數字郵政編碼,首位不爲0。
使用這些正則時的注意事項
1. 不同語言的語法差異
各語言對正則的支持略有不同。JavaScript 不支持 lookbehind(舊版),Python 的 re 模塊默認不支持原子組。複製正則後建議在目標語言環境裏驗證。
2. 轉義問題
在字符串中寫正則時,反斜槓需要雙寫。比如 \d 在 Python 字符串裏要寫成 '\\d',或使用原始字符串 r'\d'。
3. 格式校驗 ≠ 數據合法
正則只能做格式層面的校驗。身份證末位校驗碼、郵箱域名是否真實存在、手機號是否在網,都需要額外的邏輯處理。
在線驗證
調試或驗證這些正則時,可以使用 toolshu.com 提供的兩個工具:
- 正則表達式可視化工具:將正則解析爲圖形化的自動機,直觀理解匹配結構
- 正則表達式測試工具:輸入正則和文本,實時高亮匹配結果
兩個工具均在瀏覽器本地運行,無需登錄。



加載中...