首页 > 工具箱 > 常用正则速查库

常用正则速查库

手机号、邮箱、身份证这些正则,每次要用都得重新搜一遍,搜到的还经常是错的。这页把常用的整理成一份带例子的清单:每条都标了该匹配什么、不该匹配什么,还有它的已知局限。点「试一下」会把正则和例子一起填进下面的测试框,当场验证。

在线测试 改正则或改文本都会立即重算

正则清单

几条容易踩的坑

别用后行断言
(?<=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)。规避办法是避免嵌套量词、把 .* 换成更具体的字符类,以及不要拿用户输入当正则去跑。
相关工具
正则测试(高亮匹配与替换)、文本批量替换文本行处理测试数据生成
已复制