每个开发者都该收藏的 20 个正则表达式
最实用的正则表达式速查表——邮箱、URL、手机号、IP、日期等。复制粘贴即可使用。
正则表达式是那种工作时感觉像魔法、不工作时让人抓狂的工具。我收集实用模式已经好几年了,这 20 个是我反复使用的。
收藏这个页面。你会回来的。
你会忘记的基础
在看模式之前,快速复习容易混淆的部分:
.匹配任意字符(除换行)*表示零个或多个,+表示一个或多个,?表示零个或一个\d是数字,\w是单词字符,\s是空白^是字符串开头,$是字符串结尾()分组,[]定义字符类,{}设置数量
20 个模式
1. 邮箱地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
覆盖大多数真实邮箱。不完全符合 RFC 5322(几乎没有什么完全符合),但处理 99% 的有效地址。
2. URL(HTTP/HTTPS)
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)
匹配带路径和查询字符串的 HTTP 和 HTTPS URL。
3. 手机号(国际)
^\+?[1-9]\d{1,14}$
E.164 格式——国际通用。中国手机号:^1[3-9]\d{9}$
4. IPv4 地址
^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$
验证每个八位组在 0-255 之间。更简单的模式会接受像 999.999.999.999 这样的无效地址。
5. IPv6 地址
^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
基本的完整格式 IPv6。不覆盖缩写表示法(::),但处理最常见的格式。
6. 日期(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
ISO 8601 日期格式。验证月和日的范围,但不检查像 2 月 31 日这样的不可能日期。
7. 时间(HH:MM,24 小时制)
^([01]\d|2[0-3]):([0-5]\d)$
24 小时格式,00:00 到 23:59。
8. 十六进制颜色代码
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
匹配 3 位和 6 位十六进制颜色:#fff、#1a2b3c。
9. 强密码
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
至少 8 个字符,包含大写、小写、数字和特殊字符。根据需要调整最小长度和允许的字符。
10. 用户名
^[a-zA-Z0-9_-]{3,20}$
字母数字加下划线和连字符,3-20 个字符。
11. HTML 标签
<\/?[\w\s]*>|<.+[\W]>
匹配开始和结束 HTML 标签。不要用正则来解析 HTML——用专门的解析器。但快速搜索时可以用。
12. 去除空白
^\s+|\s+$
匹配首尾空白。清理操作时很有用。
13. 重复词
\b(\w+)\s+\1\b
捕获重复的词,如 "the the" 或 "is is"。校对文本时很好用。
14. 文件扩展名
\.([a-zA-Z0-9]+)$
提取文件扩展名。分组 1 给出不带点的扩展名。
15. URL 友好字符串(slug)
^[a-z0-9]+(?:-[a-z0-9]+)*$
验证 URL slug:小写字母、数字和连字符。不允许连续连字符,不以连字符开始或结束。
16. 信用卡号(基础)
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})$
检测 Visa、MasterCard 和 American Express 模式。仅做格式验证——实际验证请始终使用支付处理器。
17. UUID v4
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
验证带正确版本和变体位的 UUID 版本 4 格式。
18. JSON 字符串值
"(?:[^"\\]|\\.)*"
匹配正确转义的 JSON 字符串值,正确处理反斜杠转义。
19. CSS 属性
([a-z-]+)\s*:\s*([^;]+);
提取 CSS 属性-值对。分组 1 是属性名,分组 2 是值。
20. Markdown 链接
\[([^\]]+)\]\(([^)]+)\)
匹配 [文本](url) 链接。分组 1 是链接文本,分组 2 是 URL。
使用正则的建议
从简单开始逐步构建。 不要试图一次写出完美的模式。从最简单的可用版本开始,然后添加边界情况处理。
使用测试工具。 部署前一定要用真实数据测试你的模式。边界情况会让你惊讶。
加注释。 大多数正则引擎支持详细模式,可以添加注释和空白来提高可读性。
知道什么时候不用正则。 解析 HTML、验证复杂日期或处理深度嵌套结构——这些用专门的解析器。
你还可以用 文本对比 验证正则替换是否产生了正确的输出,或用 字符计数 检查匹配字符串的长度。
正则是一项随练习进步的技能。你不需要记住每条语法规则——只需要知道足够多来阅读模式并根据需要修改它们。把这份速查表放在手边,你就能少花时间在 Stack Overflow 上,多花时间在实际开发上。