JQuery Подтвердить плагин - проверка пароля - минимальные требования - Regex

У меня проблема с паролем.

Там была зарегистрированная форма с некоторыми полями. Я использую плагин jQuery Validate для проверки пользовательских входов.

Все работает, кроме проверки пароля:

Пароль должен соответствовать минимальным требованиям:

  • минимальная длина: 8 → Я просто использую 'minlength: 8'
  • как минимум один строчный символ
  • как минимум одна цифра
  • Разрешенные символы: A-Z a-z 0-9 @* _ -.!

В настоящий момент я использую этот код для проверки пароля:

$.validator.addMethod("pwcheck",
function(value, element) {
   return /^[A-Za-z0-9\d=!\[email protected]_*]+$/.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=!\[email protected]_*]+$/.test(value);
                    });
                });
                </script>

Ответ 1

Если я добавлю (?=.*[a-z]), весь код больше не работает.

Добавьте сюда:

/^(?=.*[a-z])[A-Za-z0-9\d=!\[email protected]_*]+$/

Однако, это намного проще сделать без просмотра:

$.validator.addMethod("pwcheck", function(value) {
   return /^[A-Za-z0-9\d=!\[email protected]_*]*$/.test(value) // consists of only these
       && /[a-z]/.test(value) // has a lowercase letter
       && /\d/.test(value) // has a digit
});

Ответ 2

Ну, вы можете использовать {8,} вместо "+" для минимум 8 символов без максимума или лучше, но {8, 20} для минимум 8 и максимум 20.

Действительно, хотя я не вижу значения, пытаясь сжать всю вашу проверку в одном регулярном выражении. Если вы сломаете его, это упростит работу, уменьшит вероятность ошибок и позволит вам сообщить пользователю о конкретной причине, ПОЧЕМУ пароль был сработал, а не все требования.

Вы можете разбить его на несколько проверок.

//proper length
value.length >= 8 
//only allowed characters
/^[A-Za-z0-9\d=!\[email protected]_*]+$/.test(value) 
//has a digit
/\d/.test(value)
//has a lowercase letter
/[a-z]/.test(value)

Я не знаком с плагином jQuery Validation, но, полагаю, вы могли бы вернуть полезное сообщение для каждого неудавшегося теста.

Ответ 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!!
    };