带过几个实习生,发现他们一遇到正则就头疼,以为要把那一堆符号背下来。 其实不用 —— 我自己写了 10 年代码,正则语法照样记不全, 实际需求就那十几个模式,直接抄改就行。
这篇整理 12 个开发中最常用的正则模式,每个都给出正则本身 + 用途 + 常见的坑。 收藏这一篇,以后遇到验证需求直接来抄。
先理解 6 个基础符号(看懂正则的钥匙)
不用背全部语法,理解这 6 个就能看懂 90% 的正则:
\d= 一个数字(0-9);\w= 一个字母 / 数字 / 下划线+= 前面的出现 1 次或多次;*= 0 次或多次;?= 0 次或 1 次(可选){n}= 恰好 n 次;{n,m}= n 到 m 次[abc]= a 或 b 或 c 中的一个;[a-z]= a 到 z 任意一个()= 分组(捕获);|= 或^= 开头;$= 结尾(包住整个正则表示"完整匹配")
12 个常用模式(直接抄)
1. 中国手机号
正则:^1[3-9]\d{9}$
含义:1 开头,第二位 3-9,后面 9 位数字,共 11 位。 坑:号段一直在增加,这个宽松版只验证格式,真实有效性靠短信验证码。
2. 邮箱
正则:^[\w.+-]+@[\w-]+(\.[\w-]+)+$
含义:用户名@域名.后缀。坑:邮箱的完整 RFC 规则极其复杂, 这个能覆盖 99% 的真实邮箱,不要追求"100% 符合 RFC"的超长正则,实际没必要。
3. 身份证号(18 位)
正则:^\d{17}[\dXx]$
含义:17 位数字 + 最后一位数字或 X。坑:这只验证格式, 真正的身份证还有校验位算法(最后一位是前 17 位算出来的),严格验证要额外做校验位计算。
4. URL
正则:^https?://[\w.-]+(:\d+)?(/[\w./?%&=-]*)?$
含义:http / https 开头的网址。坑:URL 规则也很复杂, 这个覆盖常见网址,不含中文域名 / 特殊编码。
5. 日期(YYYY-MM-DD)
正则:^\d{4}-\d{2}-\d{2}$
含义:4 位年 - 2 位月 - 2 位日。坑:只验证格式不验证合法性, 2026-13-45 也会通过。要验证真实日期用日期库(如 dayjs)。
6. 时间(HH:MM:SS)
正则:^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$
含义:00-23 时 : 00-59 分 : 00-59 秒。这个连合法性都验证了(小时不超 23)。
7. 中国邮政编码
正则:^[1-9]\d{5}$
含义:首位 1-9(不为 0),共 6 位数字。
8. IPv4 地址
正则:^(\d{1,3}\.){3}\d{1,3}$
含义:四组 1-3 位数字用点分隔。坑:这个宽松版允许 999.999.999.999, 严格验证每段 0-255 需要更复杂的正则,但前端粗筛这个够用。
9. 纯中文
正则:^[一-龥]+$
含义:全是常用汉字。坑:不含生僻字 / 繁体扩展区, 严格处理所有汉字用 Unicode 属性 \p{Script=Han}(需 u 标志)。
10. 强密码(至少 8 位含大小写数字)
正则:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
含义:用了"前瞻"(?=...) 确保同时含小写 + 大写 + 数字,且至少 8 位。 这是"前瞻断言"的经典用法,记下来很有用。
11. 车牌号(普通)
正则:^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-Z0-9]{5}$
含义:省份简称 + 字母 + 5 位字母数字。坑:新能源车牌是 6 位,要单独处理。
12. 价格金额(最多两位小数)
正则:^\d+(\.\d{1,2})?$
含义:整数,可选小数点后 1-2 位。坑:不验证范围, 要限制最大值用代码而不是正则。
怎么自己改正则
拿现成正则改成你要的,几个常见操作:
- 改长度:
\d{11}改成\d{8}就是 8 位数字 - 改可选:某部分加
?变成可选,如(:\d+)?端口号可有可无 - 加选项:
(jpg|png|gif)加一个就(jpg|png|gif|webp) - 放宽 / 收紧:
[3-9]改[0-9]放宽,反之收紧
验证正则的正确姿势
不要凭脑子想正则对不对,用测试工具喂各种输入实测:
- 把正则贴到测试工具
- 喂正常的输入(应该匹配)
- 喂边界输入(空字符串 / 超长 / 特殊字符)
- 喂恶意输入(应该被拒绝的)
- 看每种输入的匹配结果对不对
尤其是验证用户输入的正则,一定要测边界 case,不然上线后用户输入个奇葩内容就崩了。
总结
正则不用背,理解 6 个基础符号 + 收藏常用的 12 个模式就够应付 90% 的需求。 遇到新需求拿现成的改,改完用测试工具喂各种输入验证。
站里的正则测试工具 支持实时高亮匹配 + 分组捕获 + 全部标志位,内置手机号 / 邮箱 / URL / 日期等示例直接套用。 正则常用来处理接口返回的数据,配合JSON 报错定位一起用。