/
magarich
/
web
Обзор
Документация
Войти
/
magarich
/
web
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
html/lab4/task8/script.js
130 строк
5 KB
Юра Магарьян
Final submission: Lab2 and Lab3 by Magaryan Yury PIZ2402
17 апр 2026, 23:12
17 апр 2026, 23:12
0827836
Код
Авторство
О чём код?
document.addEventListener('DOMContentLoaded', function() { const passwordInput = document.getElementById('password'); const strengthIndicator = document.getElementById('strengthIndicator'); const analyzeBtn = document.getElementById('analyzeBtn'); const resultDiv = document.getElementById('result'); const scoreDiv = document.getElementById('score'); const criteriaList = document.getElementById('criteriaList'); // Функция для расчета сложности пароля function calculatePasswordStrength(password) { let score = 0; const criteria = []; // Длина пароля if (password.length >= 8) { score += 2; criteria.push({ text: "Длина не менее 8 символов", met: true }); } else { criteria.push({ text: "Длина не менее 8 символов", met: false }); } if (password.length >= 12) { score += 1; criteria.push({ text: "Длина не менее 12 символов", met: true }); } else { criteria.push({ text: "Длина не менее 12 символов", met: false }); } // Наличие цифр if (/\d/.test(password)) { score += 2; criteria.push({ text: "Содержит цифры", met: true }); } else { criteria.push({ text: "Содержит цифры", met: false }); } // Наличие строчных букв if (/[a-z]/.test(password)) { score += 1; criteria.push({ text: "Содержит строчные буквы", met: true }); } else { criteria.push({ text: "Содержит строчные буквы", met: false }); } // Наличие заглавных букв if (/[A-Z]/.test(password)) { score += 2; criteria.push({ text: "Содержит заглавные буквы", met: true }); } else { criteria.push({ text: "Содержит заглавные буквы", met: false }); } // Наличие специальных символов if (/[^a-zA-Z0-9]/.test(password)) { score += 3; criteria.push({ text: "Содержит специальные символы", met: true }); } else { criteria.push({ text: "Содержит специальные символы", met: false }); } // Проверка на последовательности if (!/(.)\1{2,}/.test(password)) { score += 1; criteria.push({ text: "Нет повторяющихся символов", met: true }); } else { criteria.push({ text: "Нет повторяющихся символов", met: false }); } return { score: Math.min(score, 10), criteria }; } // Функция для обновления индикатора function updateStrengthIndicator(score, hasInput) { const segments = document.querySelectorAll('.strength-segment'); segments.forEach(segment => { segment.classList.remove('active', 'red', 'yellow', 'green'); }); if (!hasInput) return; // При score 0 показываем 1 сегмент, иначе — score сегментов (макс. 10) const count = Math.max(score, 1); let colorClass; if (score <= 3) { colorClass = 'red'; } else if (score <= 7) { colorClass = 'yellow'; } else { colorClass = 'green'; } for (let i = 0; i < count && i < 10; i++) { segments[i].classList.add('active', colorClass); } } // Обработчик ввода в поле пароля passwordInput.addEventListener('input', function() { const password = this.value; const { score } = calculatePasswordStrength(password); updateStrengthIndicator(score, password.length > 0); }); // Обработчик кнопки анализа analyzeBtn.addEventListener('click', function() { const password = passwordInput.value; if (password.length === 0) return; const { score, criteria } = calculatePasswordStrength(password); scoreDiv.textContent = `${score}/10`; criteriaList.innerHTML = ''; criteria.forEach(criterion => { const li = document.createElement('li'); li.className = `criteria-item ${criterion.met ? 'met' : ''}`; li.innerHTML = ` <span class="criteria-icon">${criterion.met ? '✓' : '✗'}</span> <span class="criteria-text">${criterion.text}</span> `; criteriaList.appendChild(li); }); resultDiv.classList.remove('hidden'); }); });