Javascript — простой измеритель надежности пароля

  • Автор темы Boltm18
  • Обновлено
  • 16, May 2024
  • #1
Я пытаюсь создать простой индикатор надежности пароля с помощью javascript и элемента прогресса html5, что-то не так, он не работает, но нет ошибок консоли, какие-либо предложения, пожалуйста, помогите?:

 <!DOCTYPE html>
<html>
<head>
<title>JavaScript Password Meter</title>
<script>
 window.addEventListener('load', function() {
 var password = document.getElementById("pwd");
 password.addEventListener('change', function() {

 // Reset if password length is zero
 if (password.length === 0) {
 document.getElementById("progresslabel").innerHTML = "";
 document.getElementById("progress").value = "0";
 return;
 }
 // Password requirements
 var match = new Array();
 match.push("[$@$!%*#?&]"); // Special Chars
 match.push("[A-Z]"); // Uppercase
 match.push("[0-9]"); // Numbers
 match.push("[a-z]"); // Lowercase

 // Check progress
 var prog = 0;
 for (var i = 0; i < match.length; i++) {
 if (new RegExp(match[i]).test(password)) {
 prog++;
 }
 }
 //Length must be at least 8 chars
 if(prog > 2 && password.length > 7){
 prog++;
 }
 // Display it
 var progress = "";
 var strength = "";
 switch (prog) {
 case 0:
 case 1:
 case 2:
 strength = "25%";
 progress = "25";
 break;
 case 3:
 strength = "50%";
 progress = "50";
 break;
 case 4:
 strength = "75%";
 progress = "75";
 break;
 case 5:
 strength = "100% - Password strength is good";
 progress = "100";
 break;
 }
 document.getElementById("progresslabel").innerHTML = strength;
 document.getElementById("progress").value = progress;

 });
 });
 </script>
<style>
progress {
 -webkit-appearance: none;
 appearance: none;
 max-width: 120px;
 margin: 0 2px;
}
progress[value] {
 color: #777
} /* IE10 */
 progress::-webkit-progress-bar {
background:#ccc;
}
 progress::-webkit-progress-value {
background:#777
}
 progress::-moz-progress-bar {
background:#777;
}
</style>
</head>
<body>
<form>
 <div>
 <label for="pwd">Password:</label>
 <input type="text" id="pwd">
 <progress id="progress" value="0" max="100" data-label="password strength">70</progress>
 <span id="progresslabel"></span></div>
</form>
</body>
</html>


Код (разметка):

Boltm18


Рег
04 Apr, 2006

Тем
86

Постов
195

Баллов
645
  • 21, May 2024
  • #2
спасибо, это очень помогло, я тоже поменял:

 passwordInput.addEventListener('input', function() {


Код (разметка): to

 passwordInput.addEventListener('change', function() {


Код (разметка): по какой-то причине «изменение» не обновляет элемент прогресса при вводе, тогда как «ввод» это делает. Я не знаю, почему?
 

AdmVPS


Рег
16 Apr, 2013

Тем
83

Постов
173

Баллов
618
  • 04, Jun 2024
  • #3
Измените строки 7 и 8 на
 var passwordInput = document.getElementById("pwd");
passwordInput.addEventListener('change', function() {
password = passwordInput.value;
HTML: по сути, вы тестировали HTML, а не значение поля ввода.
 

Masterknight


Рег
24 Sep, 2013

Тем
80

Постов
194

Баллов
624
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно