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

时间:2014-10-12 07:26:21

标签: javascript

密码应包含

  1. 至少一个大写字母
  2. 至少一个小写字母
  3. 至少一位数
  4. 至少一个特殊符号
  5. 应该超过4个字符
  6. 我试过了 - ^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$

5 个答案:

答案 0 :(得分:5)

你不需要一些大的怪物单个正则表达式,这可能涉及诸如前瞻之类的奥秘,并且随着新条件的增加而难以维持。你所需要的只是

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;

}

答案 1 :(得分:3)

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

您可以使用上述正则表达式进行预测,如果需要,您可以轻松附加任何其他条件 未来。您基本上都在检查每个标准是否存在于前瞻中。

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

DEMO

答案 2 :(得分:0)

您可以检查没有正则表达式的每个条件。这个想法是检查每个条件(小写,大写,长度,数字)并更改开关

Demo

HTML

<label for="password">Type password</label><br/>
<input type="text" name="password" id="password" />
<input type="button" name="check" id="check" onclick="check()" value="Check password!"/>

<p id="respuesta"></p>

的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";
}

答案 3 :(得分:0)

正则表达式下面应该适合你...

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

HTML代码

<input type="text" id="pass" />
<input type="button" id="btnpass" value="Test" />

jQuery代码

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

$("#btnpass").click(function(){
    var checkval = pattern.test($("#pass").val());

    if(!checkval) {
        alert("Invalid password");
    }
});

http://jsfiddle.net/ty72wn1g/4/

答案 4 :(得分:0)

@user663031 给出了一个很好的答案的增强版

var errors = {
   uppercase: { regex: /[A-Z]/, description: 'At least one uppercase letter' },
   lowercase: { regex: /[a-z]/, description: 'At least one lowercase letter' },
   digit: { regex: /[0-9]/, description: 'At least one digit' },
   special: { regex: /[^A-Za-z0-9]/, description: 'At least one special symbol' },
   length: { test: e => e.length > 2, description: 'Should be more than 2 characters' },
};

function validatePassword(e) {
  return Object.entries(errors).flatMap(([name, { test, regex, description }]) => {
    const isValid = test ? test(e) : regex.test(e);
    return isValid ? [] : { description, name };
  });
}

console.log(JSON.stringify(validatePassword('a'),null,2))