正则表达式入门:手机号、邮箱、日期怎么写
一、先拆一个手机号正则
^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.5,写
1.5会连「1a5」一起匹配,要写1\.5。 - 量词前面没东西。
*abc报语法错误,量词必须有作用对象。 - 零宽匹配原地踏步。
a*在没有 a 的位置也匹配空串(甚至空文本也匹配),如果每次都从同一位置继续找,就会永远停在那儿。本工具对零宽匹配强制前进一位,所以a*在bbb上会给出 4 个空匹配(位置 0、1、2、3),而不是无限循环。
六、直接算
→ 正则测试器:实时高亮匹配、列出捕获组与位置
→ 文本处理:去重、排序、大小写、批量替换
→ 数据脱敏:手机号、身份证、邮箱按规则打码
本站文章为个人使用经验的原创整理,除已注明来源的引用外均为本人撰写。文中涉及的软件名称、商标、截图等归各自权利人所有,引用仅用于说明与交流。如认为本站内容侵犯了你的合法权益,请通过「关于本站」页面的联系方式告知,核实后将及时更正或删除。