写在前面
正则表达式是开发者绕不开的工具,但很少有人会把所有语法背下来。更实用的做法是:理解核心语法,遇到具体场景直接查现成的模式。
本文整理了开发中最高频出现的 20 个正则表达式,每条附上模式说明和示例,可以直接复制使用。文末附在线验证工具入口,方便调试。
基础语法速览
在看具体模式之前,先确认几个最常用的元字符:
| 符号 | 含义 |
|---|---|
. |
匹配任意单个字符(换行除外) |
* |
前一个字符重复 0 次或多次 |
+ |
前一个字符重复 1 次或多次 |
? |
前一个字符重复 0 次或 1 次 |
^ |
匹配字符串开头 |
$ |
匹配字符串结尾 |
\d |
匹配数字,等价于 [0-9] |
\w |
匹配字母、数字、下划线 |
\s |
匹配空白字符 |
{n,m} |
重复 n 到 m 次 |
[abc] |
匹配括号内任意一个字符 |
(a|b) |
匹配 a 或 b |
一、用户信息类
1. 邮箱地址
^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
说明: 匹配标准邮箱格式。本地部分允许字母、数字和 ._%+-,域名部分要求有点号分隔,顶级域名至少2位。
示例匹配: user@example.com、hello.world+tag@sub.domain.org
2. 中国大陆手机号
^1[3-9]\d{9}$
说明: 匹配以 1 开头、第二位为 3-9 的 11 位手机号,覆盖目前所有运营商号段。
示例匹配: 13812345678、19911112222
3. 座机号码(含区号)
^(0\d{2,3})[\-\s]?(\d{7,8})$
说明: 匹配带区号的座机,区号 3-4 位,号码 7-8 位,中间可有连字符或空格。
示例匹配: 010-12345678、0571 87654321
4. 中国身份证号(18位)
^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$
说明: 匹配18位身份证。包含省份代码、出生年份(18xx/19xx/20xx)、月份、日期校验,末位允许 X。注意这只做格式校验,不做校验位计算。
5. 用户名(字母数字下划线)
^[a-zA-Z0-9_]{4,16}$
说明: 常见注册场景,4-16位,只允许字母、数字、下划线。可根据需求调整长度区间。
6. 强密码
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$
说明: 至少8位,必须包含小写字母、大写字母、数字、特殊字符各至少一个。使用了前瞻断言 (?=...)。
二、网络地址类
7. URL
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)$
说明: 匹配 http 和 https 链接,包含路径、查询参数、锚点等完整 URL 结构。
示例匹配: https://toolshu.com/regex-visualizer、http://sub.example.com/path?q=1
8. IPv4 地址
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
说明: 精确匹配 0.0.0.0 到 255.255.255.255 范围内的 IPv4 地址。
示例匹配: 192.168.1.1、255.255.255.0
9. IPv6 地址(简化版)
^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
说明: 匹配完整展开的 IPv6 地址(不含缩写形式)。生产环境建议使用更完整的版本。
10. 域名
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$
说明: 匹配标准域名,支持多级子域名,每段最长63字符。
三、日期时间类
11. 日期(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
说明: 匹配标准 ISO 日期格式,对月份和日期范围做了约束,但不校验具体月份天数(如2月30日能通过)。
示例匹配: 2024-01-31、2000-12-01
12. 时间(HH:MM:SS)
^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$
说明: 匹配 24 小时制时间,小时 00-23,分钟秒钟 00-59。
13. 中文日期(YYYY年MM月DD日)
^\d{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[12]\d|3[01])日$
示例匹配: 2024年3月15日、2000年12月01日
四、内容格式类
14. 整数(含负数)
^-?[1-9]\d*$|^0$
说明: 匹配整数,允许负号,但不允许前导零(01 不匹配)。0 单独处理。
15. 小数(含负数)
^-?([1-9]\d*|0)\.\d+$
说明: 匹配带小数点的数字,小数点后必须有数字。不匹配 1.(末尾有点没有数字)。
16. 中文字符
^[\u4e00-\u9fa5]+$
说明: 匹配纯汉字字符串,Unicode 范围覆盖常用汉字。
17. 空行
^\s*$
说明: 匹配只含空白字符或完全为空的行,常用于清理文本时过滤空行。
18. HTML 标签
<([a-zA-Z][a-zA-Z0-9]*)\b[^>]*>(.*?)<\/\1>
说明: 匹配成对的 HTML 标签及其内容。注意:用正则解析复杂 HTML 并不可靠,复杂场景建议用 DOM 解析器。
19. 十六进制颜色值
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
说明: 匹配 CSS 颜色值,支持3位和6位简写。
示例匹配: #FF5733、#fff
20. 中国邮政编码
^[1-9]\d{5}$
说明: 匹配6位数字邮政编码,首位不为0。
使用这些正则时的注意事项
1. 不同语言的语法差异
各语言对正则的支持略有不同。JavaScript 不支持 lookbehind(旧版),Python 的 re 模块默认不支持原子组。复制正则后建议在目标语言环境里验证。
2. 转义问题
在字符串中写正则时,反斜杠需要双写。比如 \d 在 Python 字符串里要写成 '\\d',或使用原始字符串 r'\d'。
3. 格式校验 ≠ 数据合法
正则只能做格式层面的校验。身份证末位校验码、邮箱域名是否真实存在、手机号是否在网,都需要额外的逻辑处理。
在线验证
调试或验证这些正则时,可以使用 toolshu.com 提供的两个工具:
- 正则表达式可视化工具:将正则解析为图形化的自动机,直观理解匹配结构
- 正则表达式测试工具:输入正则和文本,实时高亮匹配结果
两个工具均在浏览器本地运行,无需登录。



加载中...