Конечно, можно сократить код, используя функциональные возможности JavaScript.
setCustomValidity является методом объектов формы в JavaScript, который используется для установки пользовательского сообщения об ошибке валидации. Часто используется вместе с событием "invalid" для проверки валидности ввода данных в форму.
Упрощение кода можно достичь с помощью использования функции-обертки и объекта, который хранит в себе все правила валидации.
Вот пример кода, который выполняет валидацию с использованием setCustomValidity:
function validateForm(event) { const inputs = document.querySelectorAll('input'); const validationRules = { name: { pattern: /^[a-zA-Z]{3,}$/, message: 'Имя должно содержать не менее трех символов (только буквы)' }, email: { pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/, message: 'Пожалуйста, введите правильный адрес электронной почты' }, password: { pattern: /^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/, message: 'Пароль должен содержать не менее 8 символов, включая хотя бы одну заглавную букву, одну прописную букву и одну цифру' } }; for (let input of inputs) { const rule = validationRules[input.name]; if (rule && !input.value.match(rule.pattern)) { input.setCustomValidity(rule.message); } else { input.setCustomValidity(''); } } } const form = document.querySelector('form'); form.addEventListener('invalid', validateForm, true); form.addEventListener('submit', validateForm);
Этот код создает объект validationRules, который содержит правила валидации для каждого поля формы. Затем он использует querySelectorAll, чтобы выбрать все поля ввода, и проходит по ним с помощью цикла for. Внутри цикла он проверяет, если есть правило валидации для данного поля, и если значение поля не соответствует шаблону, то вызывается setCustomValidity с сообщением об ошибке. Если значение поля соответствует шаблону, то устанавливается пустое сообщение об ошибке с помощью setCustomValidity.
Это более компактный и легко поддерживаемый способ описания правил валидации для формы, и он позволяет добавить или изменить правила валидации всего лишь изменив объект validationRules