需求分析
- 密码合法字符包括:数字、字母大小写、标点符号;
- 密码强度一般需要以上类型的组合及长度要求;
功能实现
- 先分别写出以上4种组合的正则表达式
let password = 'aBcdefg123!'
// 数字
let reg1 = '\\d';
// 字母
let reg21 = '[a-z]';
let reg22 = '[A-Z]';
// 符号
let reg3 = '[`\\-=\\[\\]\\\\;\',.\/~!@#$%^&*()_+{}|:"<>?]';
- 检测整个密码是否符合以上组合匹配要求及长度要求6-20位
// 混合匹配
let reg = new RegExp(`^(${reg1}|${reg21}|${reg22)|${reg3}){6,20}$`);
let ret = reg.test(password);
- 使用组合中的正则分别对密码进行校验,获取满足的组合数来校验强度
// 符合规则数
let regs = [reg1, reg21, reg22, reg3];
let num = regs.reduce(function (sum, regStr, index, regs) {
let b = new RegExp(regStr).test(password);
return (b ? 1 : 0) + sum
}, 0)
if (ret && num > 2) {
console.log('合法,', num);
} else {
console.log('不合法,', num);
}