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