У меня есть поле пароля, которое я хочу проверить по трем условиям. Когда я соответствую всем критериям, он пропускает одну силу: слабый.
Когда я очищаю поле ввода, одно выражение регулярного выражения все еще соответствует критериям, и я не знаю почему.
Проскакивает слабая сила и когда убираешь все. Сила остается на низком уровне, но она должна иссякнуть. Есть предложения, что не так или как я могу это исправить? заранее спасибо
Это мой HTML:
<label class = "customer__form-field js-cm-field">
<span>{{'form.password' | trans}} *</span>
<input type = "password"
name = "password"
required>
</label>
<div class = "password-strength progress js-cm-password-strength" data-passwordstrength = "empty">
<div class = "progress-bar" role = "progressbar">
Strength
</div>
</div>
<ul class = "password-tips">
<li class = "letters" data-letters = "false">
<i class = "fa fa-check"></i>
lower and uppercase letters
Kleine letters en hoofdletters.
</li>
<li class = "numbers" data-numbers = "false">
<i class = "fa fa-check"></i>
letters and numbers
Letters en cijfers.
</li>
<li class = "characters" data-characters = "false">
<i class = "fa fa-check"></i>
special characters
Speciale characters
</li>
</ul>
Это мой JS
var validation_message = "";
function returnError () {
return validation_message;
};
// Password validation
$.validator.addMethod("password", function(value) {
var strength = {
0: "empty",
1: "bad",
2: "weak",
3: "strong"
};
var score = 0;
// If password contains both lower and uppercase characters, increase strength value.
if (value.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {
score += 1;
$('.letters').attr('data-letters', "true");
$('.js-cm-password-strength').attr('data-passwordstrength', strength[score]);
} else {
score -= 1;
$('.letters').attr('data-letters', "false");
$('.js-cm-password-strength').attr('data-passwordstrength', strength[score]);
}
// // // If it has numbers and characters, increase strength value.
if (value.match(/([a-zA-Z])/) && value.match(/([0-9])/)) {
score += 1;
$('.numbers').attr('data-numbers', "true");
$('.js-cm-password-strength').attr('data-passwordstrength', strength[score]);
} else {
score -= 1;
$('.numbers').attr('data-numbers', "false");
$('.js-cm-password-strength').attr('data-passwordstrength', strength[score]);
}
// // // If it has one special character, increase strength value.
if (value.match(/([!,%,&,@,#,$,^,*,?,_,~])/)) {
score += 1;
$('.characters').attr('data-characters', "true");
$('.js-cm-password-strength').attr('data-passwordstrength', strength[score]);
} else {
score -= 1;
$('.characters').attr('data-characters', "false");
$('.js-cm-password-strength').attr('data-passwordstrength', strength[score]);
}
if (score < 1) {
validation_message = "Het wachtwoord is te zwak kijk bij de tips om het wachtwoord sterker te maken.";
return false;
} else {
return true;
}
}, returnError);
Правила проверки jQuery http://jqueryvalidation.org/validate/
rules: {
password: {
password: true
},
}
@Lublaut не помогает
Каково ваше состояние для пустой?
@Lublaut, это проблема, я пробовал value.length, null, "" и т.д., неважно, что я использую. это не снижает оценку
Вы говорите, что что бы вы ни делали, сила всегда плохая? даже для сильных и слабых?
@Lublaut Я говорю так: когда вы находитесь в форме, атрибут данных пуст. Я ввожу пароль, который соответствует 1 критерию. Например, aaaaaA (нижний и верхний регистры). Теперь становится плохо. Я добавляю число aaaaaaA $ (критерий символа), он принимает его, но сила все еще плохая. Когда я добавляю число aaaaaaA $ 1 (критерий числа). Это идет к силе хорошо. Так что скачет слабо. Когда я удаляю все, пустое поле ввода. Он не сбрасывается должным образом. Так что я по-прежнему соответствую всем критериям. Когда я снова вставляю букву "а". Он сбрасывается, он должен сбрасываться, когда он пустой.
Второй критерий не выполняется, потому что не выполняется второе условие .... Попробуйте удалить всю часть еще, а также изменить оценка <1 на оценка <0.
@Lublaut Когда я заполняю значения для второго критерия: он исключает: $ ('. Numbers'). Attr ('data-numbers', "true"); Как это может быть не так?
второе условие ложно для примера aaaaaaaaaaaA $
@Lublaut Значит, он должен содержать цифру и букву, а не только. Потому что $ - это символ, и это делает условие ложным.
@Lublaut, у меня эта часть работает, иначе она не сбрасывает атрибуты данных. Так что счет остается хорошим. Это не пойдет



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте сменить
score < 1наscore < 0