密码应包含
我试过了 - ^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$
答案 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
}
答案 2 :(得分:0)
您可以检查没有正则表达式的每个条件。这个想法是检查每个条件(小写,大写,长度,数字)并更改开关
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");
}
});
答案 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))