Валидация форм: required, pattern, проверка через JS

Валидация форм: основы и важность 🧐

Форма без валидации — это как машина без тормозов: выглядит красиво, но пользоваться опасно! Валидация помогает убедиться, что данные введены корректно до отправки на сервер. Это экономит время пользователя и ресурсы сервера.

💡 Хорошая валидация — это баланс между удобством и строгостью. Пользователь должен понимать, что пошло не так, а не гадать, как угодить вашему коду.


Простая валидация с HTML5-атрибутами 🛠️

Современный HTML предлагает встроенные способы валидации. Вот два самых популярных атрибута:

required — обязательное поле

Поле должно быть заполнено, иначе форма не отправится.

<input type="text" name="username" required>

pattern — проверка по регулярному выражению

Позволяет задать шаблон для ввода. Например, проверка номера телефона:

<input 
  type="tel" 
  name="phone" 
  pattern="[0-9]{10}" 
  title="Введите 10 цифр без пробелов и скобок"
>

🔥 Совет: Всегда добавляйте title к pattern — это текст подсказки, который увидит пользователь при ошибке.


Кастомные проверки через JavaScript 🎯

HTML-валидация — это здорово, но иногда нужна более гибкая логика. Например, проверка совпадения паролей или динамические условия.

Пример: проверка паролей на совпадение

<form id="signup-form">
  <input type="password" id="password" placeholder="Пароль">
  <input type="password" id="confirm-password" placeholder="Повторите пароль">
  <button type="submit">Зарегистрироваться</button>
</form>
const form = document.getElementById('signup-form');

form.addEventListener('submit', function(event) {
  const password = document.getElementById('password').value;
  const confirmPassword = document.getElementById('confirm-password').value;

  if (password !== confirmPassword) {
    alert('Пароли не совпадают!');
    event.preventDefault(); // Отменяем отправку формы
  }
});

Валидация «на лету» (при вводе)

Можно проверять данные сразу, не дожидаясь отправки формы:

document.getElementById('password').addEventListener('input', function() {
  const password = this.value;
  const errorElement = document.getElementById('password-error');

  if (password.length < 8) {
    errorElement.textContent = 'Пароль должен быть не короче 8 символов';
  } else {
    errorElement.textContent = '';
  }
});

Как сделать валидацию дружелюбной? 🤝

  1. Показывайте ошибки сразу — не заставляйте пользователя гадать.
  2. Используйте понятные сообщения — вместо «Invalid input» напишите «Введите email в формате example@mail.com».
  3. Подсвечивайте проблемные поля — добавьте красную рамку или иконку ошибки.

Пример стилизации невалидного поля:

input:invalid {
  border-color: #ff6b6b;
  box-shadow: 0 0 0 2px rgba(255, 107, 107, 0.2);
}

Продвинутые техники: Constraint Validation API 🚀

Браузеры предоставляют мощный API для работы с валидацией:

const emailInput = document.getElementById('email');

if (!emailInput.checkValidity()) {
  console.log('Ошибка:', emailInput.validationMessage);
}

Методы и свойства:

  • checkValidity() — возвращает true/false в зависимости от валидности.
  • setCustomValidity(message) — позволяет задать кастомное сообщение об ошибке.
  • validity — объект с детализацией ошибки (например, validity.tooShort).

Подводные камни и как их избежать ⚠️

  1. Не полагайтесь только на фронтенд-валидацию — злоумышленники могут отправить данные напрямую на сервер. Всегда дублируйте проверки на бэкенде!
  2. Помните о мобильных пользователях — на маленьких экранах сложно разглядеть детали ошибки.
  3. Тестируйте крайние случаи — что будет, если ввести пробелы? А спецсимволы?

Практический пример: форма регистрации 📝

Соберём всё вместе! Форма с валидацией:

  • Обязательные поля (required).
  • Проверка email (type="email").
  • Совпадение паролей (через JavaScript).
<form id="register-form">
  <input type="text" name="name" required placeholder="Имя">
  <input type="email" name="email" required placeholder="Email">
  <input type="password" name="password" required placeholder="Пароль" minlength="8">
  <input type="password" name="confirm-password" required placeholder="Повторите пароль">
  <button type="submit">Зарегистрироваться</button>
</form>
document.getElementById('register-form').addEventListener('submit', function(event) {
  const password = this.elements.password.value;
  const confirmPassword = this.elements['confirm-password'].value;

  if (password !== confirmPassword) {
    alert('Пароли не совпадают!');
    event.preventDefault();
  }
});

Что дальше? 🔮

Освоив базовую валидацию, можно углубиться в:

  • AJAX-валидацию (проверка логина на занятость без перезагрузки страницы).
  • Библиотеки вроде validator.js для сложных сценариев.
  • Визуальные улучшения — анимации ошибок, подсказки при наведении.

Если хотите разобрать AJAX-валидацию в стиле Netflix — загляните к Даниле Бежину на YouTube. Там есть разборы сложных кейсов!

Теперь ваши формы будут не только красивыми, но и умными! 🧠✨

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube