我的密码检查器有点问题。
有一些领域的注册表格。 我使用jQuery Validate插件来验证用户输入。
除密码验证外,一切正常:
密码应符合一些最低要求:
目前我使用此代码验证密码:
$.validator.addMethod("pwcheck",
function(value, element) {
return /^[A-Za-z0-9\d=!\-@._*]+$/.test(value);
});
此代码适用于允许的字符,但不适用于最低要求。
我知道您可以使用例如(?=.*[a-z])
来满足小写要求。但我只是不让它发挥作用。
如果我添加(?=.*[a-z])
,则整个代码不再有效。我需要知道如何正确地将代码添加到现有代码中。
感谢您的回答!
这是完整的代码
<script>
$(function() {
$("#regform").validate({
rules: {
forename: {
required: true
},
surname: {
required: true
},
username: {
required: true
},
password: {
required: true,
pwcheck: true,
minlength: 8
},
password2: {
required: true,
equalTo: "#password"
},
mail1: {
required: true,
email: true
},
mail2: {
required: true,
equalTo: "#mail1"
}
},
messages: {
forename: {
required: "Vornamen angeben"
},
surname: {
required: "Nachnamen angeben"
},
username: {
required: "Usernamen angeben"
},
password: {
required: "Passwort angeben",
pwcheck: "Das Passwort entspricht nicht den Kriterien!",
minlength: "Das Passwort entspricht nicht den Kriterien!"
},
password2: {
required: "Passwort wiederholen",
equalTo: "Die Passwörter stimmen nicht überein"
},
mail1: {
required: "Mail-Adresse angeben",
email: "ungültiges Mail-Format"
},
mail2: {
required: "Mail-Adresse wiederholen",
equalTo: "Die Mail-Adressen stimmen nicht überein"
}
}
});
$.validator.addMethod("pwcheck",
function(value, element) {
return /^[A-Za-z0-9\d=!\-@._*]+$/.test(value);
});
});
</script>
答案 0 :(得分:40)
如果我添加
(?=.*[a-z])
,则整个代码不再有效。
在此处添加:
/^(?=.*[a-z])[A-Za-z0-9\d=!\-@._*]+$/
但是,如果没有前瞻,这样做会容易得多:
$.validator.addMethod("pwcheck", function(value) {
return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these
&& /[a-z]/.test(value) // has a lowercase letter
&& /\d/.test(value) // has a digit
});
答案 1 :(得分:2)
你可以使用{8,}代替“+”至少8个字符,没有最大值或更好但是{8,20}最少8个,最多20个。
真的,虽然我没有看到试图将所有验证压缩到单个正则表达式中的价值。如果你打破它,它会使维护更容易,更容易出错,并且它使你能够向用户报告密码失败的具体原因,而不是整个要求。
您可以将其分解为几张支票
//proper length
value.length >= 8
//only allowed characters
/^[A-Za-z0-9\d=!\-@._*]+$/.test(value)
//has a digit
/\d/.test(value)
//has a lowercase letter
/[a-z]/.test(value)
我不熟悉jQuery Validation插件,但我认为您可以为每个失败的测试返回有用的消息。
答案 2 :(得分:0)
如果您想查看确认密码和最低字符验证,那么您可以使用
<input type="password" id="password" name="password" class="validate[required,minSize[8]]"/>
<input type="password" id="confirm_password" name="confirm_password" class="validate[required,equals[password]]"/>
答案 3 :(得分:0)
密码验证可以使用多个规则,例如:
var _validatePassword = function (validateUserNameRules, inputModel)
{
//bolean parameter validateUserNameRules -> true/false
//this method recive a model like this:
//inputModel.userName -> string
//inputModel.password -> string
//inputModel.password2 -> String
var ResultModel = {
ResultId: 1, //1 success
Message: "Password is correct."
};
if (validateUserNameRules && inputModel.userName == "") {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: User name cannot be blank.";
return (ResultModel);
}
var re = /^\w+$/;
if (validateUserNameRules && !re.test(inputModel.userName)) {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: Username must contain only letters, numbers and underscores.";
return (ResultModel);
}
if (inputModel.password != "" && inputModel.password == inputModel.password2) {
if (inputModel.password.length < 6) {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: Password must contain at least six characters.";
return (ResultModel);
}
if (validateUserNameRules && inputModel.password == inputModel.userName) {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: Password must be different from the Account Name.";
return (ResultModel);
}
re = /[0-9]/;
if (!re.test(inputModel.password)) {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: Password must contain at least one number (0-9).";
return (ResultModel);
}
re = /[a-z]/;
if (!re.test(inputModel.password)) {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: Password must contain at least one lowercase letter (a-z).";
return (ResultModel);
}
re = /[A-Z]/;
if (!re.test(inputModel.password)) {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: Password must contain at least one uppercase letter (A-Z).";
return (ResultModel);
}
} else {
ResultModel.ResultId = 2;
ResultModel.Message = "Error: Please check that you've entered and confirmed your password.";
return (ResultModel);
}
return (ResultModel); //success password validation!!
};
答案 4 :(得分:0)
如果您使用ValidationEngine,则可以使用此
"password": {
"regex": /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{6,30}$/, // /^[A-Za-z0-9\d=!\-@._*]*$/i
"alertText": "* Invalid Password, <br/>"
+ " 1] Min 1 uppercase letter.<br/>"
+ " 2] Min 1 lowercase letter.<br/>"
+ " 3] Min 1 special character.<br/>"
+ " 4] Min 1 number."
},
将此代码添加到jquery.validationEngine-en.js文件中
然后使用
class="validate[required,custom[password],minSize[6],maxSize[30]]"
在“文本框”类中
答案 5 :(得分:0)
尝试使用所有特殊符号的
$.validator.addMethod("pwdcheck", function(value) {
return /[A-Z]/.test(value) &&
/\d/.test(value) &&
/[=!\-@._*\$\#\%\^\&\(\)\~\`\<\>\/\?\\\|\{\}\[\]\;\:\'\"\,\+]/.test(value)
});
答案 6 :(得分:0)
以下方法将检查一个大写字母,一个数字和一个特殊字符。
要进行长度检查,您可以添加minlenth:8
,maxlength:20
$.validator.addMethod("passwordFormatCheck", function(value, element) {
return this.optional(element) || /^(?=.*\d)(?=.*[A-Z])(?=.*\W).*$/i.test(value);
}, 'Password must contain one capital letter,one numerical and one special character');