正则不需要背,但有 10 个模式能覆盖日常 80% 的校验场景。全部复制即用,同时说清每个表达式的限制——没有一个正则是”完美”的,取舍很重要。
1. 邮箱(宽松版)
^[\w.+-]+@[\w-]+(\.[\w-]+)+$
能覆盖 99% 常见邮箱。不要追求 RFC 5322 完美匹配——那个正则几千字符长,日常用不上。
2. 中国手机号
^1[3-9]\d{9}$
13-19 开头 11 位。不要只写 ^1\d{10}$,因为那会把很多无效第二位也放过去;^1[3-9]\d{9}$ 更贴近当前中国大陆手机号的常见校验口径。
3. URL(http/https)
^https?:\/\/[^\s/$.?#].[^\s]*$
允许带端口、路径、查询串。注意:[^\s] 里 \s 是空白字符,这能排除 URL 中不该出现的空格。
4. IPv4 地址
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
0-255 每段都校验。别偷懒写 \d{1,3},那会把 999.999.999.999 放过去。
5. 中国身份证号
^\d{17}[\dXx]$
只校验格式,不校验校验位。真正的验证需要走 ISO 7064 MOD 11-2 算法,正则做不到。
6. 金额(最多两位小数)
^\d+(\.\d{1,2})?$
不允许千分位。如果允许 1,234.56:^\d{1,3}(,\d{3})*(\.\d{1,2})?$。
7. 日期(YYYY-MM-DD,宽松)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
校验月份和日的上下界,但不能判断闰年和 2 月 30 日这种非法日期——那种校验该交给日期库。
8. 中文字符
[\u4e00-\u9fa5]
基本汉字区间。如果需要覆盖扩展 A/B/C 区(罕见字、繁体古字),要加 \u3400-\u4dbf、代理对等,复杂得多。
9. 密码强度(至少 8 位,含大小写和数字)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
(?=...) 是零宽断言,不消耗字符但要求后续内容必须能匹配。加 (?=.*[!@#$%^&*]) 可要求特殊字符。
10. 多个空白字符(合并用)
\s+
最不起眼但最常用的一个。配合 replace(/\s+/g, ' ') 可把任意多个空格/制表/换行合并成一个空格,清洗文本必备。
三个调试建议
- 命名捕获组
(?<year>\d{4})比$1 $2 $3可读性高一个量级 - 非捕获组
(?:...)能让引擎少记录匹配位置,长文本上性能差异明显 - 贪婪 vs 非贪婪:
.*尽可能多匹配,.*?尽可能少匹配——HTML 解析踩坑最多的就是这个
实时测试
别在代码里反复改正则。把表达式贴进测试器,粘贴目标文本,匹配段高亮、分组捕获、替换预览一次性看清楚。