25.01.2024
Написал не сложный скрипт для проверки сложности пароля для формы RDWeb, после развертывания роли Web-доступ к серверу терминалов.
<script>
const form = document.getElementById('FrmLogin')
const warn = document.querySelector('#trErrorIncorrectCredentials')
const warnContainer = document.getElementById('trErrorIncorrectCredentials')
const newPassField = document.getElementById('NewUserPass')
const repeatPassField = document.getElementById('ConfirmNewUserPass')
const passTemplates = [
{
template: /[a-z]/,
msg: 'Нет строчный букв'
},
{
template: /[A-Z]/,
msg: 'Нет заглавных букв'
},
{
template: /[0-9]/,
msg: 'Нет цифр'
},
{
template: /[^\w\s0-9]/,
msg: 'Нет спец символов'
},
{
template: /.{6,}/,
msg: 'Не менее 6 символов'
}
]
const passTemplate = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^\w\s]).{6,}/
const showWarn = errorBlock => {
warnContainer.style.display = 'block'
warn.innerHTML = `
<td>
<br /><br />
<div class="wrng">
${errorBlock}
</div>
</td>
`
}
form.addEventListener('submit', e => {
const errors = []
const value = newPassField.value
passTemplates.forEach(({ template, msg }) => {
if (!template.test(value)) {
errors.push(msg)
}
})
if (errors.length > 0) {
const passStrength = Math.floor(passTemplates.length - errors.length) /passTemplates.length * 100
const errorView = errors.reduce((errorBlock, msg) => {
errorBlock += `<li>${msg}</li>`
return errorBlock
}, '')
showWarn(`<div>Сила пароля ${passStrength}%</div><ul>${errorView}</ul>`)
e.preventDefault()
} else if(newPassField.value !== repeatPassField.value) {
showWarn('Поля новый пароль и подтверждение пароля должны совпадать')
e.preventDefault()
}
})
</script>