js求一段验证密码强度的正则?

项目里登录需要对密码进行强度的验证。
密码必须包含:大写字母,小写字母,数字,特殊字符
网上找了很多代码都不能用。

const regex = /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[\W])(?=.*[\S])^[0-9A-Za-z\S]{6,12}$/g;
const str = `@Qq13979453900`; //验证不过
console.log(regex.test(str))

求这个正则。

阅读 4.8k
3 个回答
/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!-\/:-@\[-`\{-~])[!-~]+$/

长度自己定,把最后面的+号改成自己需要的长度就可以了

const checkArr = [
    {
        regexName: 'regexNum',
        value: /\d/
    },
    {
        regexName: 'regexLower',
        value: /[a-z]/
    },
    {
        regexName: 'regexUpper',
        value: /[A-Z]/
    },
    {
        regexName: 'regexSpeChar',
        value: /[~!@#$%^&*]/
    }
];
function checkPasswordLevel(password) {
    let count = 0;
    checkArr.forEach(item => {
        if(item.value.test(password)) {
            count++;
        }
    });
    switch (count) {
        case 4:
            console.log("密码强度极高");
            break;
        case 3:
            console.log("密码强度高");
            break;
        case 2:
            console.log("密码强度中等");    
            break;
        case 1: 
            console.log("密码强度低");    
            break;
        default:
            console.log("密码不符合规定");    
            break;
    }
}
checkPasswordLevel("123");      // 密码强度低
checkPasswordLevel("123as");    // 密码强度中等
checkPasswordLevel("123asQW");  // 密码强度高
checkPasswordLevel("123asQW!@");// 密码强度极高
checkPasswordLevel("{}()");     // 密码不符合规定

由于字符出现顺序随机,所以使用多个正则表达式判断,看匹配成功数

如:
判断数字
判断小写字母
判断大写字母
判断可显符号

这就 4个表达式了,一个正确就是 25%,4个正好 100%

完美?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题