速查表 · 正则

10 个能直接用的正则——附边界 case 测试

网上多数正则速查表只给你模式,不告诉你什么会被匹配。这里每条都附 ✓/✗ 测试样例,你能一眼看出边界。复制前先看看 ✗ 那行——有可能你以为匹配的它不匹配。

💡

每条正则点击右上角「复制」即可。觉得测试样例不够?粘到 正则测试器 自己加 case。

邮箱(宽松版)

常用邮箱匹配

JS / Python
^[\w\.\-+]+@[\w\-]+(\.[\w\-]+)+$

日常 99% 的场景够用。允许 + 和点号、多级子域名。校验 RFC 5322 全规范——下面有严格版。

[email protected] [email protected] [email protected] @example.com用户名为空 [email protected]域名首字符为点 user@example缺少 TLD

中国手机号

11 位手机号(13x-19x 号段)

JS / Python
^1[3-9]\d{9}$

2026 年仍有效的号段:130-199。如果允许 +86 前缀,前面加 (\+?86)?

13812345678 19912345678 1201234567812x 不是手机号段 +8613812345678含国际区号 1381234567只有 10 位

URL 地址

HTTP / HTTPS URL

JS / Python
^https?:\/\/[\w\-]+(\.[\w\-]+)+([\/\?#][^\s]*)?$

允许 query string、hash、复杂路径。覆盖 IP URL 和 punycode 域名——那种用 new URL() 解析更稳。

https://example.com http://sub.example.com/path/to/x?a=1&b=2#hash https://devtool.blueblueliu.com/tools/regex-tester.html ftp://example.com只匹配 http(s) example.com缺少协议头

身份证号(18 位)

大陆居民身份证号码

JS / Python
^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$

这个比常见的 ^\d{17}[\dXx]$ 严格——校验年份 1900-2099、月份 01-12、日期 01-31。但还校验校验位(最后一位)。要严格校验得用 ISO 7064 算法。

110101199001011234 11010119900101123X 110101189001011234年份 1890 越界 110101199013011234月份 13 越界

IPv4 地址

严格 0.0.0.0 ~ 255.255.255.255

JS / Python
^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$

边界严格校验。不要^(\d{1,3}\.){3}\d{1,3}$——它会把 999.999.999.999 也匹配上。

192.168.1.1 0.0.0.0 255.255.255.255 256.1.1.1256 越界 192.168.01.1前导 0(八进制歧义)

16 进制颜色

CSS 颜色短/长格式

JS / Python
^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$

兼容 #FFF 短写、#FFFFFF 完整、#FFFFFFFF 带 alpha。

#fff #FFAA00 #6366F1AA FFF缺 # #FFFFF5 位非法

日期 YYYY-MM-DD

带月日范围校验的日期

JS / Python
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

注意:能挡掉月份 13、日期 32 这种明显错的,但挡不住 2026-02-30 这种"月内日期超限"。要严格校验必须用日期 API:!isNaN(new Date(s).getTime())

2026-05-23 2024-02-29 2026-13-0113 月 2026/05/23分隔符不对

密码强度

8 位以上 · 大小写 · 数字 · 符号

JS / Python
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).{8,}$

用了 4 个 lookahead 同时校验四类字符。可以减项:去掉某个 (?=.*X) 就放宽对应规则。

P@ssw0rd MyN@me1s password缺大写、数字、符号 P@ssw0r仅 7 位

中文汉字

常用 CJK 字符

JS / Python
[一-龥]+

基本汉字范围。包含扩展 A/B/C 区的生僻字(如"𠀀")。要全字符集用 \p{Script=Han}(Unicode property,需要 /u flag)。

你好世界 写代码在 "abc写代码123" 中匹配 𠀀扩展 B 区

中国车牌号(含新能源)

普通车牌 + 新能源车牌

JS / Python
^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$

第二位不能是 I 或 O(容易和 1/0 混淆),通过 [A-HJ-NP-Z] 排除。后续 4-5 位允许字母数字(覆盖普通牌 5 位 + 新能源 6 位)。

京A12345 沪B123456新能源 6 位 粤Y8888警 京I12345第二位 I 非法

怎么用这些正则

以邮箱为例:

// JavaScript
const re = /^[\w\.\-+]+@[\w\-]+(\.[\w\-]+)+$/;
re.test("[email protected]");   // true
# Python
import re
re.fullmatch(r"^[\w\.\-+]+@[\w\-]+(\.[\w\-]+)+$", "[email protected]")
⚠️

:Java 里反斜杠要双重转义。\d 在 Java 字符串里要写成 "\\d"。复制本文正则到 Java 别忘了把所有 \ 翻倍。

什么时候不要用正则

这件事说重要也重要。下面这些场景用正则反而是坑:

在线测试这些正则

实时高亮匹配位置 · 显示捕获组 · 支持 /g /i /m 修饰符

打开正则测试器