正则表达式测试器 打开工具

常用正则表达式:手机号、邮箱、URL、身份证

网上流传的「万能正则」大多有两个问题:写得过度严格(把合法输入判成非法),或者过度宽松(什么都放过去)。下面几条给出保守版本,并说明它不覆盖什么——比给一条「完美正则」有用。

中国大陆手机号

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

11 位,1 开头,第二位 3–9。这是号段层面的校验,不保证号码真实存在——真实性只能靠短信验证。

不覆盖:虚商号段(已并入 1[3-9])、国际号码、带 +86 前缀的写法。需要国际号码请用 E.164 格式单独处理。

邮箱(保守版)

^[^\s@]+@[^\s@]+\.[^\s@]+$

只校验「有本地部分、有 @、有域名、域名里有点」。这看起来太宽松,但它不会误杀合法地址——邮箱的完整语法(RFC 5322)复杂到包含引号、注释、IP 字面量,严格实现反而会拒绝真实用户。

实践建议:前端用这条粗校验,真实性靠发验证邮件。

URL

^https?://[^\s/$.?#].[^\s]*$

只接受 http/https,要求有主机名。不校验端口、路径、查询串的细节。

不要试图用正则完整校验 URL——IPv6 字面量、国际化域名(IDN)、百分号编码会让表达式膨胀到不可维护。用 new URL() 解析,捕获异常即可。

身份证号

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

18 位,校验地区码首位、出生年份前缀、月份、日期范围与末位校验位格式。

它不校验校验位本身(第 18 位的模 11 计算),也不校验日期是否真实存在(如 2 月 30 日)。需要严谨校验请配合代码计算校验位。

日期与 IP

YYYY-MM-DD:^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

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

IPv4 这条是真校验每个字节 0–255,代价是表达式很长。如果只是「看起来像 IP」,^(\d{1,3}\.){3}\d{1,3}$ 就够。

上面这些都不用装软件,也不用注册:打开页面就能用。

打开正则表达式测试器 →

常见问题

为什么我的邮箱正则把合法地址判成非法?

多半写了过度严格的版本(限制本地部分长度、禁止加号、要求特定顶级域名)。邮箱实际允许的字符比大多数人想的宽,建议用保守版本 + 验证邮件。

正则能校验密码强度吗?

能校验「至少 8 位且含数字与字母」这类规则,但用多条独立检查更清楚。一条巨型前瞻断言写的密码正则会难以维护,报错也难解释。

中文姓名怎么校验?

用 ^[\u4e00-\u9fa5]{2,10}$ 之类只能覆盖常用汉字,少数民族姓名、生僻字、中间点(·)都会漏。姓名不建议强校验。