正则就是一套匹配规则,验证手机号、邮箱、身份证这类格式校验全靠它。
核心三步:
① test()——验证字符串是否匹配,返回 true/false
② d——数字、w——字母数字下划线、s——空格
③ ^ 开头 $ 结束——完整匹配
坑:正则里的反斜杠要双写、[] 是或、{} 是数量、test 返回布尔值别当真值用。
// 返回"object",和普通对象分不清
typeof [];
// 真数组 → true(推荐这个)
Array.isArray([]);
// 普通对象 → false
Array.isArray({});
// 也能判,了解即可
[] instanceof Array;
正则就是「匹配规则」。test() 像拿规则去试:字符串符合规则就返回 true,不符合就 false。
// 斜杠写规则(推荐)
let reg = /abc/;
// 另一种写法
let reg2 = new RegExp("abc");
// 字符串里含abc → true
reg.test("abc123");
| 用途 | 正则 |
|---|---|
| 手机号 | /^1[3-9]\d{9}$/ |
| 中文姓名(2~4字) | /^[一-龥]{2,4}$/ |
| 邮箱(简易) | /^\w+@\w+\.\w+(\.\w+)?$/ |
| 身份证(18位简易) | /^[1-9]\d{5}(19|20)\d{2}\d{2}\d{2}\d{3}[\dXx]$/ |
// 把数字全打码 "订单1001,价格299".replaceAll(/\d+/g, "***"); // 逗号、竖线、分号都当分隔 "苹果,香蕉|橘子;西瓜".split(/[,|;]/);
如果你用 replace 想全部替换却只换了第一个,就会踩坑。因为 replace(不带 g)只换第一个,要全部换得用 replaceAll,或者正则后面加 /g(g 就是「全局」的意思)。
① 用在哪:登录页校验手机号/邮箱、注册校验中文姓名、手机号中间四位打星脱敏。
② 常见坑:用 typeof 判数组得到 object;replace() 以为全替其实只替第一个。
③ 怎么解决:判数组用 Array.isArray();全替换用 replaceAll() 或正则加 /g。
| API | 作用 | 参数 | 返回值 | 代码示例 |
|---|---|---|---|---|
| /规则/.test(str) | 测字符串是否匹配 | 字符串 | 真/假 | /abc/.test("abc123"); // true |
| str.replaceAll(规则,新) | 把匹配的全部换掉 | 规则、新串 | 新字符串 | "a-b".replaceAll(/-/g, "_"); |
| g 修饰符 | 全局匹配所有 | 无 | 无 | /a/g.test("aaa"); // 全局匹配 |