常用正则示例
面试中"手写正则"几乎都集中在几个固定场景:邮箱、手机号、身份证、URL、IP、日期、千分位、密码强度。本文对每个场景给出正则 + 解释 + 测试,便于直接背诵与对照修改。
工程提示:业务场景千差万别,下面给出的正则只是"够用且严谨度合理"的版本,不是"绝对正确"的版本。面试时说明权衡(如是否允许新版手机号、是否支持港澳台)反而加分。
邮箱
正则
const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
解释
| 部分 | 含义 |
|---|---|
[a-zA-Z0-9._%+-]+ | 用户名:字母数字及常见符号 |
@ | 字面量 at 符号 |
[a-zA-Z0-9.-]+ | 域名:字母数字及 .、- |
\.[a-zA-Z]{2,} | 顶级域:. 加至少 2 位字母 |
测试
emailRe.test("user@example.com"); // true
emailRe.test("user.name+tag@sub.cn"); // true
emailRe.test("user@example"); // false,缺少顶级域
emailRe.test("@example.com"); // false,缺少用户名
emailRe.test("user@.com"); // false,域名不完整
RFC 5322 规范的邮箱极其复杂(支持注释、引号等),完整正则长达几千字符。面试给出上述"实用版本"即可,并主动说明"完整 RFC 邮箱需要更复杂的正则"。
手机号
正则
// 中国大陆手机号:1 开头,第二位为 3-9,共 11 位
const phoneRe = /^1[3-9]\d{9}$/;