Javascript 如何使用以下条件验证密码?

Javascript 如何使用以下条件验证密码?,javascript,Javascript,密码应包含 至少有一个大写字母 至少一个小写字母 至少一位数字 至少一个特殊符号 应大于4个字符 我已经尝试过-^(?=.*\d)(?=.[a-zA-Z])[a-zA-Z0-9!@$%&*{6,20}$您不需要一些大型的单一正则表达式,它可能会涉及像lookaheads这样的arcana,并且随着新条件的添加而难以维护。你所需要的只是 function validatePassword(pw) { return /[A-Z]/ .test(pw) &&

密码应包含

  • 至少有一个大写字母
  • 至少一个小写字母
  • 至少一位数字
  • 至少一个特殊符号
  • 应大于4个字符

  • 我已经尝试过-
    ^(?=.*\d)(?=.[a-zA-Z])[a-zA-Z0-9!@$%&*{6,20}$
    您不需要一些大型的单一正则表达式,它可能会涉及像lookaheads这样的arcana,并且随着新条件的添加而难以维护。你所需要的只是

    function validatePassword(pw) {
    
        return /[A-Z]/       .test(pw) &&
               /[a-z]/       .test(pw) &&
               /[0-9]/       .test(pw) &&
               /[^A-Za-z0-9]/.test(pw) &&
               pw.length > 4;
    
    }
    

    您不需要一些大型的单一正则表达式,因为它可能会涉及像lookaheads这样的arcana,并且随着新条件的添加而很难维护。你所需要的只是

    function validatePassword(pw) {
    
        return /[A-Z]/       .test(pw) &&
               /[a-z]/       .test(pw) &&
               /[0-9]/       .test(pw) &&
               /[^A-Za-z0-9]/.test(pw) &&
               pw.length > 4;
    
    }
    
    您可以将上面的正则表达式与lookahead一起使用,如果在中需要,您可以轻松地附加任何其他条件 将来你基本上是在检查你的每一个标准是否由lookaheads提供

    if(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(\W|_)).{5,}$/.test(pwd)){
       // valid password
    }
    

    您可以将上面的正则表达式与lookahead一起使用,如果在中需要,您可以轻松地附加任何其他条件 将来你基本上是在检查你的每一个标准是否由lookaheads提供

    if(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(\W|_)).{5,}$/.test(pwd)){
       // valid password
    }
    

    您可以检查不使用正则表达式分隔的每个条件。其思想是检查每个条件(小写、大写、长度、数字)并更改开关

    HTML

    键入密码

    Javascript

    checkbt = document.getElementById("check");
    passtxt = document.getElementById("password");
    respuesta = document.getElementById("respuesta");
    
    check = function(){
        texto = passtxt.value.trim();
        uppercase = false;
        lowercase = false;
        number = false;
        lenght = false;
        //uppercase letter    
        for (i=0; i< texto.length; i++){
            if (texto[i] == texto[i].toUpperCase()){
                uppercase = true;
                break;
            } else {
                uppercase = false;
            }
        }
    //lowercase
            for (i=0; i< texto.length; i++){
                if (texto[i] == texto[i].toLowerCase()){
                    lowercase = true;
                    break;
                } else {
                    lowercase = false;
                }
            }
    
        //number
            for (i=0; i< texto.length; i++){
                if (!isNaN(texto[i])){
                    number = true;
                    break;
                } else {
                    number = false;
                }
            }    
    
    
        if (texto.length < 6){
            lenght = false;
        } else {
            lenght = true;
        }
    
        if (lowercase && uppercase && number && lenght){
            respuesta.innerHTML = "Password is good";    
        } else {
            respuesta.innerHTML = "Password is bad <br />" +
            "lowercase: " + boolstr(lowercase) + "<br />"+
            "uppercase: " + boolstr(uppercase) + "<br />"+
            "number: " + boolstr(number) + "<br />"+
            "lenght: " + boolstr(lenght) + "<br />";
        }
    
    }
    
    function boolstr(val){
    if (val == true)
        return "true";
        else
        return "false";
    }
    
    checkbt=document.getElementById(“检查”);
    passtxt=document.getElementById(“密码”);
    respuesta=document.getElementById(“respuesta”);
    检查=函数(){
    texto=passtxt.value.trim();
    大写=假;
    小写=false;
    数字=假;
    长度=假;
    //大写字母
    对于(i=0;i”+
    小写:“+boolstr(小写)+”
    ”+ 大写:“+boolstr(大写)+”
    ”+ “编号:”+boolstr(编号)+“
    ”+ “长度:”+boolstr(长度)+“
    ”; } } 函数boolstr(val){ 如果(val==true) 返回“真”; 其他的 返回“false”; }
    您可以检查不使用正则表达式分隔的每个条件。其思想是检查每个条件(小写、大写、长度、数字)并更改开关

    HTML

    键入密码

    Javascript

    checkbt = document.getElementById("check");
    passtxt = document.getElementById("password");
    respuesta = document.getElementById("respuesta");
    
    check = function(){
        texto = passtxt.value.trim();
        uppercase = false;
        lowercase = false;
        number = false;
        lenght = false;
        //uppercase letter    
        for (i=0; i< texto.length; i++){
            if (texto[i] == texto[i].toUpperCase()){
                uppercase = true;
                break;
            } else {
                uppercase = false;
            }
        }
    //lowercase
            for (i=0; i< texto.length; i++){
                if (texto[i] == texto[i].toLowerCase()){
                    lowercase = true;
                    break;
                } else {
                    lowercase = false;
                }
            }
    
        //number
            for (i=0; i< texto.length; i++){
                if (!isNaN(texto[i])){
                    number = true;
                    break;
                } else {
                    number = false;
                }
            }    
    
    
        if (texto.length < 6){
            lenght = false;
        } else {
            lenght = true;
        }
    
        if (lowercase && uppercase && number && lenght){
            respuesta.innerHTML = "Password is good";    
        } else {
            respuesta.innerHTML = "Password is bad <br />" +
            "lowercase: " + boolstr(lowercase) + "<br />"+
            "uppercase: " + boolstr(uppercase) + "<br />"+
            "number: " + boolstr(number) + "<br />"+
            "lenght: " + boolstr(lenght) + "<br />";
        }
    
    }
    
    function boolstr(val){
    if (val == true)
        return "true";
        else
        return "false";
    }
    
    checkbt=document.getElementById(“检查”);
    passtxt=document.getElementById(“密码”);
    respuesta=document.getElementById(“respuesta”);
    检查=函数(){
    texto=passtxt.value.trim();
    大写=假;
    小写=false;
    数字=假;
    长度=假;
    //大写字母
    对于(i=0;i”+
    小写:“+boolstr(小写)+”
    ”+ 大写:“+boolstr(大写)+”
    ”+ “编号:”+boolstr(编号)+“
    ”+ “长度:”+boolstr(长度)+“
    ”; } } 函数boolstr(val){ 如果(val==true) 返回“真”; 其他的 返回“false”; }
    下面的正则表达式应该适合您

    var pattern = /^(?=.{5,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W])/
    
    HTML代码

    <input type="text" id="pass" />
    <input type="button" id="btnpass" value="Test" />
    
    var pattern = /^(?=.{5,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W])/
    
    $("#btnpass").click(function(){
        var checkval = pattern.test($("#pass").val());
    
        if(!checkval) {
            alert("Invalid password");
        }
    });
    

    下面的正则表达式应该适合您

    var pattern = /^(?=.{5,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W])/
    
    HTML代码

    <input type="text" id="pass" />
    <input type="button" id="btnpass" value="Test" />
    
    var pattern = /^(?=.{5,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W])/
    
    $("#btnpass").click(function(){
        var checkval = pattern.test($("#pass").val());
    
        if(!checkval) {
            alert("Invalid password");
        }
    });
    

    这是@user663031给出的伟大答案的增强版

    var错误={
    大写:{regex:/[A-Z]/,说明:'至少一个大写字母'},
    小写:{regex:/[a-z]/,说明:'至少一个小写字母'},
    数字:{regex:/[0-9]/,说明:'至少一个数字'},
    特殊:{regex:/[^A-Za-z0-9]/,说明:'至少一个特殊符号'},
    长度:{test:e=>e.length>2,说明:'应该超过2个字符',
    };
    函数validatePassword(e){
    return Object.entries(errors).flatMap([name,{test,regex,description}])=>{
    常量isValid=测试?测试(e):正则表达式测试(e);
    返回值是否有效?[]:{description,name};
    });
    }
    
    console.log(JSON.stringify(validatePassword('a'),null,2))
    这是@user663031给出的伟大答案的增强版

    var错误={
    大写:{regex:/[A-Z]/,说明:'至少一个大写字母'},
    小写:{regex:/[a-z]/,说明:'至少一个