开发工具2026-03-16 6 分钟

这 5 个正则表达式,帮我节省了 80% 的表单验证时间

分享开发者日常最常用的 5 个正则表达式,涵盖邮箱、手机号、URL、密码强度和身份证号验证。结合在线正则测试工具,让你告别反复调试的痛苦。

作为一名写了多年代码的老兵,我必须承认一个尴尬的事实:我从来没能完整背下来正则表达式的语法。每次遇到需要验证邮箱或手机号的需求,我的第一反应不是自己写,而是打开搜索引擎。为了终结这种低效的循环,我整理了这份"复制即用"的正则清单,并结合 OneKit 的在线测试工具,希望能帮你也从正则的泥潭中解脱出来。

说真的,正则表达式绝对是外星人发明的语言。少写一个反斜杠或者括号,整个逻辑就完全不一样了。我有一次因为正则写错,导致几千个用户的手机号验证失败,被产品经理追着骂了一整天。从那以后,我发誓再也不手写正则了,必须用工具测过才敢上线。

1. 电子邮箱验证

邮箱验证是最常见的场景,但也是最容易踩坑的地方。过于简单的正则(如 `.+@.+`)无法拦截非法格式,而过于复杂的正则(符合 RFC 5322 标准)又可能长达几百个字符,难以维护。下面这个版本在实用性和准确性之间取得了很好的平衡:

^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$

适用场景: 用户注册、订阅 Newsletter、找回密码。
注意点: 现代域名后缀越来越多样化(如 .museum, .tech),限制后缀长度为 2-4 位可能不适用于所有新顶级域名,可视情况调整为 `{2,}`。

2. 中国大陆手机号验证

手机号段更新频繁(如广电 192 号段),写死前三位(如 13x, 15x)的做法已经过时。推荐使用宽松验证策略,只要是 1 开头的 11 位数字即可,具体的号码有效性交给短信验证码去判断。

^1[3-9]\d{9}$

适用场景: 登录注册、身份验证。
优势: 兼容性强,不需要随着运营商发新号段而频繁修改代码。

3. 强密码检测

为了保障账户安全,通常要求密码包含大小写字母、数字和特殊符号,且长度在 8-16 位之间。使用正向预查(Lookahead)可以优雅地实现这一需求:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,16}$

解释:
`(?=.*[a-z])`: 必须包含小写字母
`(?=.*[A-Z])`: 必须包含大写字母
`(?=.*\d)`: 必须包含数字
`(?=.*[@$!%*?&])`: 必须包含特殊字符

4. URL 网址验证

验证用户输入的个人主页或项目链接。支持 http/https 协议,可选的 www 前缀。

^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

5. 身份证号(18位)

简单的正则只能验证格式(17位数字+1位数字或X),无法验证校验码的合法性。但在前端表单的初步筛选中,这个正则已经足够好用:

^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dXx]$

包含逻辑:
- 前6位地区码
- 年份限制在 1800-2099
- 月份 01-12,日期 01-31
- 最后一位可能是数字或 X

写在最后

正则表达式虽然强大,但通过阅读代码来理解其含义往往非常困难。建议在项目中将这些正则封装为通用的验证函数,并加上详细的注释。如果你在编写新的正则时遇到困难,不妨试试 OneKit 的 在线正则表达式测试工具,实时查看匹配结果,能帮你省下不少掉头发的时间。