【问题标题】:jQuery Validate plugin - password check - minimum requirements - RegexjQuery Validate 插件 - 密码检查 - 最低要求 - 正则表达式
【发布时间】:2013-09-15 18:36:41
【问题描述】:

我的密码检查器有点问题。

有一个包含一些字段的注册表单。 我使用 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>

【问题讨论】:

  • 显示其余代码。您的.validate() 电话在哪里?表单的 HTML 标记在哪里?
  • 你在哪里添加了前瞻?向我们展示您尝试过的代码而不是您的工作版本。
  • 我几乎在所有地方都添加了它。至少20个不同的位置。我没有所有的代码了......不得不说我对此很陌生。所以请原谅我。我确定它只是一个括号或类似的东西,我忘记了。
  • /^(?=.*[a-z])[A-Za-z0-9\d=!\-@._*]+$/ 应该已经做到了。你试过吗?如果是这样,它是如何失败的?
  • 贝尔吉,谢谢!奇迹般有效!不要我怎么做不到……有时你只是为了树木而想念森林。无论如何,非常感谢!

标签: jquery regex passwords jquery-validate


【解决方案1】:

您可以使用 {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 验证插件,但我认为您可以为每个失败的测试返回有用的信息。

【讨论】:

  • 是的。下次我会这样尝试。抱歉,我对编码很陌生 :) 谢谢!
【解决方案2】:

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

【讨论】:

  • 你好,至少有一个大写字母和一个特殊字符怎么样(例如# $ % ' ^ , ( ) * + . : | = ? @ / ] [ _ ` { } \ ! ; - ~)
  • @Yves /[AZ].test(value) // 有一个大写字母 && /[=!\-@._*]/.test(value) 用多余的字符扩展最后一个, 但请务必将它们包含在第一个模式中,否则在您检查特殊字符是否存在之前,您的字符串将失效。
  • 如何给这个方法提供警告信息。当此格式不匹配时显示的内容。
  • @LovePandey 请参阅 jQuery-Validate 文档或问题中的示例
【解决方案3】:

如果你想检查确认密码最少字符验证,那么你可以使用

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      在文本框类中

      【讨论】:

        【解决方案6】:

        用所有特殊符号试试这个

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

        【讨论】:

          【解决方案7】:

          以下方法将检查一个大写字母、一个数字和一个特殊字符

          对于长度检查,您可以添加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');
          

          【讨论】:

          • 包含一个小写字母怎么样?
          【解决方案8】:

          您可以创建自己的自定义 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;
          });
          

          【讨论】:

            猜你喜欢
            • 2020-10-09
            • 1970-01-01
            • 1970-01-01
            • 2011-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-24
            • 1970-01-01
            相关资源
            最近更新 更多