米格速压
正则表达式 开发 速查

正则表达式不用背:手机号 / 邮箱 / 身份证等 12 个常用模式直接抄

正则表达式记不住语法没关系,大多数实际需求就那十几个模式。整理 12 个开发中最常用的正则(手机号 / 邮箱 / 身份证 / URL / 日期等)+ 每个的坑 + 怎么自己改。

米格速压
2026-05-158 分钟
分享

带过几个实习生,发现他们一遇到正则就头疼,以为要把那一堆符号背下来。 其实不用 —— 我自己写了 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] 放宽,反之收紧

验证正则的正确姿势

不要凭脑子想正则对不对,用测试工具喂各种输入实测:

  1. 把正则贴到测试工具
  2. 正常的输入(应该匹配)
  3. 边界输入(空字符串 / 超长 / 特殊字符)
  4. 恶意输入(应该被拒绝的)
  5. 看每种输入的匹配结果对不对

尤其是验证用户输入的正则,一定要测边界 case,不然上线后用户输入个奇葩内容就崩了。

总结

正则不用背,理解 6 个基础符号 + 收藏常用的 12 个模式就够应付 90% 的需求。 遇到新需求拿现成的改,改完用测试工具喂各种输入验证。

站里的正则测试工具 支持实时高亮匹配 + 分组捕获 + 全部标志位,内置手机号 / 邮箱 / URL / 日期等示例直接套用。 正则常用来处理接口返回的数据,配合JSON 报错定位一起用。

常见疑问

正则表达式真的需要背吗?
不需要。实际开发中 90% 的正则需求就是验证手机号 / 邮箱 / 身份证 / URL 这十几个,直接抄现成的就行。真正需要理解的是几个基础符号(\d 数字、\w 字母数字、+ 一个或多个、* 零个或多个、? 可选、[] 字符集、() 分组),理解这几个就能看懂和微调现成正则,不用从零写。
同样验证手机号,为什么网上的正则五花八门?
因为"手机号规则"本身在变。早期 1[3-9]\d{9} 够用,但新号段不断增加(199、166、198 等)。严格的正则会精确列出每个号段开头,宽松的只验证"1 开头 11 位数字"。建议:① 前端验证用宽松版(1[3-9]\d{9})提升体验;② 真正的有效性靠后端发短信验证码确认,正则只是第一道粗筛。
正则的 g / i / m 这些标志位是干嘛的?
g (global) 全局匹配,找出所有匹配而不是第一个;i (ignoreCase) 忽略大小写;m (multiline) 多行模式,让 ^ $ 匹配每行的开头结尾而不是整个文本;s (dotAll) 让 . 匹配包括换行在内的任意字符;u (unicode) Unicode 模式,正确处理中文等多字节字符。最常用的是 g 和 i。
为什么我的正则在 JS 能用,PHP 不能用?
不同语言的正则引擎有差异。JS 用 ECMAScript 正则,PHP 用 PCRE,Python 用 re 模块。大部分基础语法通用,但有差异:① PHP 正则要用分隔符包裹(/pattern/);② 命名分组语法略不同;③ 部分高级特性(如递归正则)只有 PCRE 支持。验证正则时在目标语言环境实测最稳。
正则太复杂看不懂怎么办?
① 用正则测试工具,粘贴正则 + 测试文本,实时看匹配结果,边改边看;② 把复杂正则拆成几段理解;③ 用支持"正则解释"的工具(会把每个部分翻译成人话)。实在看不懂的祖传正则,与其硬啃不如用测试工具喂各种输入看它匹配什么,反推它的意图。
正则会有性能问题吗?
会,极端情况下"灾难性回溯"能让正则跑几秒甚至卡死。常见诱因:嵌套量词((a+)+)、过多的可选分组。一般业务正则(验证手机号邮箱)不会有问题。如果你的正则处理超长文本或者用户输入,避免嵌套量词,必要时设超时保护。
中文怎么匹配?
基本中文用 [\u4e00-\u9fa5](匹配常用汉字范围)。但这个范围不含生僻字 / 繁体扩展。更完整的方案是用 Unicode 属性:在启用 u 标志后用 \p{Script=Han} 匹配所有汉字。如果只是验证"包含中文",[\u4e00-\u9fa5] 够用;要严格处理所有 CJK 字符用 Unicode 属性。

看完即用

正则测试器

实时高亮匹配 + 分组捕获,前端 / 后端正则调试必备

立即免费使用
作者
米格速压

米格速压编辑组,专注于办公文件处理场景的教程编写。每周二、五更新。