jQuery验证插件-密码检查-最低要求- Regex

bqucvtff  于 2023-01-12  发布在  jQuery
关注(0)|答案(9)|浏览(177)

我的密码检查器出了点问题。
这里有一个注册表,里面有一些字段。我使用jQuery Validate插件来验证用户输入。
除了密码验证外,其他功能都可以正常工作:
密码应满足一些最低要求:

  • 最小长度:8 -〉我只是使用'minlength:8'
  • 至少一个小写字符
  • 至少一位数字
  • 允许的字符:A-Z a-z 0-9 @ * _ - .!

目前我使用以下代码验证密码:

$.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>
yjghlzjz

yjghlzjz1#

如果我添加(?=.*[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
});
x759pob2

x759pob22#

您可以创建自己的自定义jQuery验证规则。该规则将以100%的准确率返回所有条件的有效消息。

$.validator.addMethod("strong_password", function (value, element) {
    let password = value;
    if (!(/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#$%&])(.{8,20}$)/.test(password))) {
        return false;
    }
    return true;
}, function (value, element) {
    let password = $(element).val();
    if (!(/^(.{8,20}$)/.test(password))) {
        return 'Password must be between 8 to 20 characters long.';
    }
    else if (!(/^(?=.*[A-Z])/.test(password))) {
        return 'Password must contain at least one uppercase.';
    }
    else if (!(/^(?=.*[a-z])/.test(password))) {
        return 'Password must contain at least one lowercase.';
    }
    else if (!(/^(?=.*[0-9])/.test(password))) {
        return 'Password must contain at least one digit.';
    }
    else if (!(/^(?=.*[@#$%&])/.test(password))) {
        return "Password must contain special characters from @#$%&.";
    }
    return false;
});
sdnqo3pr

sdnqo3pr3#

您可以使用{8,}代替“+”,表示最少8个字符,没有最大值,或者更好的是使用{8,20},表示最少8个字符,最多20个字符。
真的,尽管我看不出把所有的验证都压缩到一个正则表达式中有什么价值,如果你把它分开,它会更容易维护,更不容易出现bug,而且它可以让你向用户报告密码失败的具体原因,而不是整个要求。
你可以把它分成几张支票

//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插件,但我认为您可以为每个失败的测试返回一条有用的消息。

lzfw57am

lzfw57am4#

如果要检查确认密码最少字符数验证,则可以使用

<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]]"/>
o7jaxewo

o7jaxewo5#

密码验证可以使用多个规则,例如:

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!!
    };
byqmnocz

byqmnocz6#

如果使用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]]"

在文本框类中

mum43rcc

mum43rcc7#

试试这个有所有特殊符号的

$.validator.addMethod("pwdcheck", function(value) {
    return /[A-Z]/.test(value) &&
           /\d/.test(value) && 
           /[=!\-@._*\$\#\%\^\&\(\)\~\`\<\>\/\?\\\|\{\}\[\]\;\:\'\"\,\+]/.test(value)
});
h4cxqtbf

h4cxqtbf8#

以下方法将检查一个大写字母、一个数字和一个特殊字符
对于长度检查,可以添加minlenth:8maxlength: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');
cs7cruho

cs7cruho9#

试试这个:

jQuery.validator.addMethod("validate_password", function(value, element) {
  if (/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/.test(value)) {
    return true;
  } else {
    return false;
  }
}, "Please enter valid Password");

相关问题