/
Coderdev
/
web-static-labs
Обзор
Документация
Войти
/
Coderdev
/
web-static-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
html/lab4/task7/password.js
96 строк
3 KB
Coderdev
1
12 май 2026, 12:37
12 май 2026, 12:37
d8ecd0f
Код
Авторство
О чём код?
'use strict'; const input = document.getElementById('passInput'); const resBody = document.getElementById('resBody'); const totalScoreEl = document.getElementById('totalScore'); const meter = document.getElementById('strength-meter'); const SPECIAL_CHARS = "~!#$%^&*_-+=?/,. < > \\"; input.addEventListener('input', () => { const pass = input.value; let score = 0; let criteria = []; if (pass.length === 0) { if (meter) meter.style.visibility = 'hidden'; resBody.innerHTML = ''; totalScoreEl.textContent = 'Итого баллов: 0'; return; } if (meter) meter.style.visibility = 'visible'; if (pass.length < 5) { score = 0; criteria.push("1"); // } else { if (pass.length >= 5 && pass.length <= 9) { score += 1; criteria.push("2"); } else if (pass.length >= 10 && pass.length <= 12) { score += 2; criteria.push("3"); } else if (pass.length > 12) { score += 3; criteria.push("4"); } let hasDigit = /[0-9]/.test(pass); let hasLetter = /[a-zA-Zа-яА-Я]/.test(pass); let hasSpec = [...pass].some(char => SPECIAL_CHARS.includes(char)); let typesCount = [hasDigit, hasLetter, hasSpec].filter(Boolean).length; if (typesCount > 1) { let bonus = typesCount - 1; score += bonus; criteria.push(`5(${bonus})`); // } if (/[a-zа-я]/.test(pass) && /[A-ZА-Я]/.test(pass)) { score += 1; criteria.push("6"); } let specCount = [...pass].filter(char => SPECIAL_CHARS.includes(char)).length; if (specCount / pass.length > 0.3) { score += 2; criteria.push("7"); } let hasLongSequence = /[a-zA-Zа-яА-Я]{3,}/.test(pass) || /[0-9]{3,}/.test(pass); if (pass.length > 12 && !hasLongSequence && !/(.)\1\1/.test(pass)) { score += 2; criteria.push("8"); } } resBody.innerHTML = `<tr><td>${criteria.join(', ')}</td><td>${score}</td></tr>`; totalScoreEl.textContent = `Итого баллов: ${score}`; updateMeter(score); }); function updateMeter(score) { const segments = document.querySelectorAll('.segment'); let colorClass = ''; if (score <= 3) colorClass = 'red'; else if (score <= 7) colorClass = 'yellow'; else colorClass = 'green'; let activeCount = Math.min(score, 10); if (activeCount === 0 && input.value.length > 0) activeCount = 1; segments.forEach((seg, i) => { seg.className = 'segment'; if (i < activeCount) seg.classList.add(colorClass); }); }