常用正则速查库
手机号、邮箱、身份证这些正则,每次要用都得重新搜一遍,搜到的还经常是错的。这页把常用的整理成一份带例子的清单:每条都标了该匹配什么、不该匹配什么,还有它的已知局限。点「试一下」会把正则和例子一起填进下面的测试框,当场验证。
在线测试
改正则或改文本都会立即重算
正则清单
几条容易踩的坑
- 别用后行断言
(?<=x)和(?<!x)到 Safari 16.4 才支持,更早的版本遇到它会直接抛语法错误,导致整个<script>都不执行——不是这一条正则失效,是整段代码不跑。要兼容老设备就改用捕获分组加$1的写法。- 带 g 的正则是有状态的
lastIndex会在两次调用之间保留。同一个带g的正则对象反复调test(),结果会 true / false 交替出现。循环里要么每次新建正则对象,要么用完手动把lastIndex归零。- 校验身份证、手机号别指望正则
- 正则只能管格式。身份证的第 18 位是加权校验码,必须算;手机号段几乎每年都有新增(比如 192、197 这些),写死
1[3-9]只是粗筛。正则通过之后仍然要走真正的校验逻辑或接口。 - 邮箱正则没有「正确答案」
- 完整符合 RFC 5322 的邮箱正则有好几百个字符,而且会放过很多现实中根本收不到信的地址。实践中用一条宽松的正则挡住明显手滑(少了 @、没有点号),真正的验证靠发一封确认邮件。
- 小心灾难性回溯
(a+)+b这类嵌套量词遇到长串不匹配的输入时,回溯次数会指数级爆炸,一条正则能把整个进程卡死(ReDoS)。规避办法是避免嵌套量词、把.*换成更具体的字符类,以及不要拿用户输入当正则去跑。- 相关工具
- 正则测试(高亮匹配与替换)、文本批量替换、文本行处理、测试数据生成。