jQuery Validate插件 – 密码检查 – 最低要求 – 正则表达式
我的密码检查器有点问题。
有一些领域的注册表格。 我使用jQuery Validate插件来validation用户输入。
除密码validation外,它都有效:
密码应满足一些最低要求:
- 最小长度:8 – >我只使用’minlength:8′
- 至少一个小写字符
- 至少一位数
- 允许的字符:AZ az 0-9 @ * _ – 。 !
目前我使用此代码validation密码:
$.validator.addMethod("pwcheck", function(value, element) { return /^[A-Za-z0-9\d=!\-@._*]+$/.test(value); });
本规范适用于允许的字符,但不适用于最低要求。 我知道你可以使用例如(?=.*[az])
来满足小写要求。 但我只是不让它发挥作用。
如果我添加(?=.*[az])
,整个代码将不再起作用。 我需要知道如何正确地将代码添加到现有代码中。
谢谢您的回答!
这是完整的代码
$(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); }); });
如果我添加
(?=.*[az])
,整个代码将不再起作用。
在这里添加:
/^(?=.*[az])[A-Za-z0-9\d=!\-@._*]+$/
但是,如果没有前瞻,这样做会容易得多:
$.validator.addMethod("pwcheck", function(value) { return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these && /[az]/.test(value) // has a lowercase letter && /\d/.test(value) // has a digit });
那么你可以使用{8,}代替“+”至少8个字符,没有最大值或更好但是{8,20}最少8个,最多20个。
实际上,虽然我没有看到试图将所有validation压缩到单个正则表达式中的价值。 如果你打破它,它会使维护更容易,更容易出错,并且它使你能够向用户报告密码失败的具体原因,而不是整个要求。
你可以把它分成几张支票
//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 /[az]/.test(value)
我不熟悉jQuery Validation插件,但我认为您可以为每个失败的测试返回有用的消息。
如果要检查确认密码和最小字符validation,则可以使用
密码validation可以使用多个规则,例如:
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 = /[az]/; if (!re.test(inputModel.password)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least one lowercase letter (az)."; return (ResultModel); } re = /[AZ]/; if (!re.test(inputModel.password)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least one uppercase letter (AZ)."; 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!! };