Формы — это лицо любого сайта. Но сколько раз вы заполняли поля, нажимали «Отправить» и получали ошибку после перезагрузки страницы? Раздражает. Сегодня разберем, как сделать валидацию на JavaScript, чтобы пользователь видел ошибки сразу, а сервер не захламлялся мусором. Это сэкономит время и нервы.
Зачем валидировать формы на клиенте?
Валидация на стороне клиента — это первая линия обороны. Она проверяет, что пользователь ввел email, а не «кот», и что пароль длиннее трех символов. Основные плюсы:
- Мгновенная обратная связь — пользователь не ждет ответа сервера.
- Меньше нагрузки на сервер — отсеиваются явные ошибки.
- Улучшение пользовательского опыта — форма не сбрасывается после отправки.
Но помните: JavaScript можно отключить. Поэтому серверную валидацию никто не отменял. Клиентская — это удобство, а не защита.
Основы: как это работает
Валидация на JavaScript строится вокруг события submit формы. Вы вешаете обработчик, который проверяет поля и либо блокирует отправку, либо разрешает. Простейший пример:
document.getElementById('myForm').addEventListener('submit', function(event) {
event.preventDefault();
let name = document.getElementById('name').value;
if (name.trim() === '') {
alert('Имя не может быть пустым');
return;
}
// Если все ок, отправляем форму
this.submit();
});Здесь мы отменяем стандартную отправку, проверяем поле name и показываем сообщение, если оно пустое. Просто и понятно.
Типы валидации: что проверять
Есть три основных типа проверок: обязательные поля, формат данных и сравнение значений. Разберем каждый.
| Тип | Пример | Как проверить |
|---|---|---|
| Обязательное поле | Имя, email | Проверить, что значение не пустое |
| Формат | Email, телефон | Использовать регулярные выражения |
| Сравнение | Пароль и подтверждение | Сравнить два поля |
Для формата email часто используют регулярку. Пример:
function isValidEmail(email) {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}Она проверяет, что есть символ @ и точка после него. Не идеально, но для 90% случаев хватает.
Валидация в реальном времени
Показывать ошибки после нажатия кнопки — это прошлый век. Современные формы проверяют поля сразу, как только пользователь заканчивает ввод. Используем событие blur или input.
document.getElementById('email').addEventListener('blur', function() {
let email = this.value;
let error = document.getElementById('emailError');
if (!isValidEmail(email)) {
error.textContent = 'Введите корректный email';
this.style.borderColor = 'red';
} else {
error.textContent = '';
this.style.borderColor = 'green';
}
});Здесь при потере фокуса проверяется email, и под полем появляется сообщение об ошибке или успехе. Пользователь видит результат мгновенно.
Собираем всё вместе: пример формы
Давайте напишем полноценную форму с регистрацией. HTML:
<form id="registerForm">
<div>
<label for="username">Имя:</label>
<input type="text" id="username" required>
<span id="usernameError" class="error"></span>
</div>
<div>
<label for="email">Email:</label>
<input type="email" id="email" required>
<span id="emailError" class="error"></span>
</div>
<div>
<label for="password">Пароль:</label>
<input type="password" id="password" required>
<span id="passwordError" class="error"></span>
</div>
<div>
<label for="confirm">Подтвердите пароль:</label>
<input type="password" id="confirm" required>
<span id="confirmError" class="error"></span>
</div>
<button type="submit">Зарегистрироваться</button>
</form>А теперь JavaScript для валидации:
document.getElementById('registerForm').addEventListener('submit', function(event) {
event.preventDefault();
let isValid = true;
// Проверка имени
let username = document.getElementById('username').value;
if (username.trim() === '') {
document.getElementById('usernameError').textContent = 'Имя обязательно';
isValid = false;
} else {
document.getElementById('usernameError').textContent = '';
}
// Проверка email
let email = document.getElementById('email').value;
if (!isValidEmail(email)) {
document.getElementById('emailError').textContent = 'Некорректный email';
isValid = false;
} else {
document.getElementById('emailError').textContent = '';
}
// Проверка пароля
let password = document.getElementById('password').value;
if (password.length < 6) {
document.getElementById('passwordError').textContent = 'Пароль должен быть минимум 6 символов';
isValid = false;
} else {
document.getElementById('passwordError').textContent = '';
}
// Проверка подтверждения
let confirm = document.getElementById('confirm').value;
if (password !== confirm) {
document.getElementById('confirmError').textContent = 'Пароли не совпадают';
isValid = false;
} else {
document.getElementById('confirmError').textContent = '';
}
if (isValid) {
// Отправляем на сервер, например через AJAX
alert('Форма отправлена');
}
});
function isValidEmail(email) {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}Этот код проверяет все поля перед отправкой. Если есть ошибка — форма не уходит. Пользователь видит сообщения под каждым полем.
Советы для профессионалов
- Используйте HTML5-атрибуты
required,type="email"— они работают даже без JS, но не дают гибкости. - Не показывайте ошибки до того, как пользователь начал ввод. Иначе форма будет выглядеть как поле боя.
- Группируйте ошибки в одном блоке, если их много. Например, выводите список вверху формы.
- Добавьте индикатор успеха (зеленую галочку) для каждого поля, чтобы пользователь знал, что все ок.
Что в итоге
Валидация форм на JavaScript — это не rocket science. Достаточно повесить обработчик на submit, проверить поля и показать ошибки. Главное — не забывать про серверную проверку, потому что JavaScript — это только для удобства. Используйте живую валидацию (blur/input), чтобы пользователь не ждал конца заполнения. И помните: хорошая форма — это та, где ошибки видны сразу, а не после перезагрузки.
Студия WNDER



