表单校验是正则的主战场。先解决一个老问题:typeof 分不清数组和普通对象,要用 Array.isArray。然后背几个拿来就能用的常用正则。
typeof []; // 返回"object",和普通对象分不清
Array.isArray([]); // 真数组 → true(推荐这个)
Array.isArray({}); // 普通对象 → false
[] instanceof Array; // 也能判,了解即可
正则就是「匹配规则」。test() 像拿规则去试:字符串符合规则就返回 true,不符合就 false。
let reg = /abc/; // 斜杠写规则(推荐)
let reg2 = new RegExp("abc"); // 另一种写法
reg.test("abc123"); // 字符串里含abc → true
| 用途 | 正则 |
|---|---|
| 手机号 | /^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。