10 个能直接用的正则——附边界 case 测试
网上多数正则速查表只给你模式,不告诉你什么会被匹配。这里每条都附 ✓/✗ 测试样例,你能一眼看出边界。复制前先看看 ✗ 那行——有可能你以为匹配的它不匹配。
每条正则点击右上角「复制」即可。觉得测试样例不够?粘到 正则测试器 自己加 case。
邮箱(宽松版)
常用邮箱匹配
JS / Python日常 99% 的场景够用。允许 + 和点号、多级子域名。不校验 RFC 5322 全规范——下面有严格版。
中国手机号
11 位手机号(13x-19x 号段)
JS / Python2026 年仍有效的号段:130-199。如果允许 +86 前缀,前面加 (\+?86)?。
URL 地址
HTTP / HTTPS URL
JS / Python允许 query string、hash、复杂路径。不覆盖 IP URL 和 punycode 域名——那种用 new URL() 解析更稳。
身份证号(18 位)
大陆居民身份证号码
JS / Python这个比常见的 ^\d{17}[\dXx]$ 严格——校验年份 1900-2099、月份 01-12、日期 01-31。但还不校验校验位(最后一位)。要严格校验得用 ISO 7064 算法。
IPv4 地址
严格 0.0.0.0 ~ 255.255.255.255
JS / Python边界严格校验。不要用 ^(\d{1,3}\.){3}\d{1,3}$——它会把 999.999.999.999 也匹配上。
16 进制颜色
CSS 颜色短/长格式
JS / Python兼容 #FFF 短写、#FFFFFF 完整、#FFFFFFFF 带 alpha。
日期 YYYY-MM-DD
带月日范围校验的日期
JS / Python注意:能挡掉月份 13、日期 32 这种明显错的,但挡不住 2026-02-30 这种"月内日期超限"。要严格校验必须用日期 API:!isNaN(new Date(s).getTime())。
密码强度
8 位以上 · 大小写 · 数字 · 符号
JS / Python用了 4 个 lookahead 同时校验四类字符。可以减项:去掉某个 (?=.*X) 就放宽对应规则。
中文汉字
常用 CJK 字符
JS / Python基本汉字范围。不包含扩展 A/B/C 区的生僻字(如"𠀀")。要全字符集用 \p{Script=Han}(Unicode property,需要 /u flag)。
中国车牌号(含新能源)
普通车牌 + 新能源车牌
JS / Python第二位不能是 I 或 O(容易和 1/0 混淆),通过 [A-HJ-NP-Z] 排除。后续 4-5 位允许字母数字(覆盖普通牌 5 位 + 新能源 6 位)。
怎么用这些正则
以邮箱为例:
// 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 别忘了把所有 \ 翻倍。
什么时候不要用正则
这件事说重要也重要。下面这些场景用正则反而是坑:
- 解析 HTML / XML — 用 DOM 解析器(
DOMParser或cheerio) - 解析 URL 取 query 参数 — 用
new URL(s).searchParams - 校验日期是否真实存在 — 用 Date API,正则挡不住 2026-02-30
- 金额、版本号 — 用专门的库(
semver等)