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