Валидация в браузере помогает человеку исправить ошибку. Серверная проверка защищает принимающую систему. Клиентскую проверку можно обойти, поэтому endpoint обязан повторно проверить ограничения.
Начните с HTML
<label for="reply">Email для ответа</label>
<input id="reply" name="email" type="email" required maxlength="254">
<label for="text">Опишите задачу</label>
<textarea id="text" name="message" required maxlength="2000"></textarea>
Не используйте placeholder вместо label. Подсказка объясняет ожидаемый формат, а ошибка сообщает, что изменить. Required уместен только у полей, без которых обращение нельзя обработать.
Проверяйте связи между полями
Для бюджета отдельные min=0 не проверяют, что нижняя граница меньше верхней. Для условного поля обязательность зависит от выбранного варианта. Скрытое поле не должно незаметно блокировать отправку.
export function budgetError(minimum, maximum) {
if (!Number.isFinite(minimum) || !Number.isFinite(maximum)) return 'Укажите числа';
if (minimum < 0 || maximum < minimum) return 'Проверьте диапазон бюджета';
return '';
}
Проверьте ошибки
Оставьте обязательное поле пустым, введите неверный email и обратный диапазон. Сообщение должно стоять рядом с полем и быть связано через aria-describedby. Сохраните введённый текст. Затем проверьте корректный ввод и отдельно серверный отказ.
Шаблоны Formhunt помогают проверить поля перед подключением обработчика отправки.
Источники и дата проверки
Редакционная сверка: 2026-10-27. Учитывайте версию инструментов в своём проекте.
Обновлено