正则表达式入门:手机号、邮箱、日期怎么写

一、先拆一个手机号正则

^1[3-9]\d{9}$
  • ^ 行首、$ 行尾:这两头加上,才是「整串必须是手机号」,否则「13812345678abc」也能匹配成功;
  • 1 字面量:第一位固定 1;
  • [3-9] 字符类:这一位是 3~9 中任意一个,排除 10、11、12 开头;
  • \d{9}:后面 9 位数字,连第一位共 11 位。

提醒:这只校验格式,不能证明号码真实存在。要验证真实性只能发短信。

二、四类基本零件

写法含义
.任意字符(默认不含换行)
\d \w \s数字 / 字母数字下划线 / 空白
[abc] [^abc]其中任意一个 / 除这些以外
* + ? {n,m}0 次以上 / 1 次以上 / 0 或 1 次 / n 到 m 次
^ $行首、行尾(加 m 标志后按行匹配)
( ) (?<name> )捕获组 / 命名组
\1 \k<name>反向引用第 1 组 / 命名组
(?= ) (?! )前瞻:后面是 / 不是

三、常用正则速查

用途正则
手机号^1[3-9]\d{9}$
邮箱(宽松)^[\w.+-]+@[\w-]+(\.[\w-]+)+$
日期(YYYY-MM-DD)`^\d{4}-(0[1-9]\
时间(24 小时制)`^([01]\d\
IPv4 地址`^((25[0-5]\
常用汉字[\u4e00-\u9fa5]
连续空白\s+
HTML 标签<[^>]+>

两点说明:日期正则不会拦住「2 月 30 日」这种不存在的日期,业务层要再判一次;汉字区间只覆盖常用区,生僻字与扩展区不含在内。邮箱用宽松写法先控形状,真要确认有效性还是发一封确认邮件。

四、贪婪与懒惰

量词默认贪婪,能多吃就多吃:

  • <.+><a><b> 上会把整串吃掉(匹配到最后一个 >);
  • 加了 ?懒惰<.+?> 只吃到第一个 >
  • 处理 HTML 更稳的写法是排除字符集:<[^>]+>

五、三个报错现场

  1. 点号忘记转义。想匹配 1.5,写 1.5 会连「1a5」一起匹配,要写 1\.5
  2. 量词前面没东西*abc 报语法错误,量词必须有作用对象。
  3. 零宽匹配原地踏步a* 在没有 a 的位置也匹配空串(甚至空文本也匹配),如果每次都从同一位置继续找,就会永远停在那儿。本工具对零宽匹配强制前进一位,所以 a*bbb 上会给出 4 个空匹配(位置 0、1、2、3),而不是无限循环。

六、直接算

正则测试器:实时高亮匹配、列出捕获组与位置

文本处理:去重、排序、大小写、批量替换

数据脱敏:手机号、身份证、邮箱按规则打码

本站文章为个人使用经验的原创整理,除已注明来源的引用外均为本人撰写。文中涉及的软件名称、商标、截图等归各自权利人所有,引用仅用于说明与交流。如认为本站内容侵犯了你的合法权益,请通过「关于本站」页面的联系方式告知,核实后将及时更正或删除。