常用正则表达式:手机号、邮箱、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}$ 之类只能覆盖常用汉字,少数民族姓名、生僻字、中间点(·)都会漏。姓名不建议强校验。