--- title: Constraint validation API slug: Web/API/Constraint_validation tags: - API - Валидация ограничений - Landing - Reference ---
Constraint Validation API позволяет проверять значения, которые пользователи вводят в элементы формы, перед отправкой на сервер.
Для определённых элементов формы, таких как {{HTMLElement("input")}}, {{HTMLElement("select")}} и {{HTMLElement("textarea")}}, можно указать допустимый формат значений, используя атрибуты вроде required
и pattern
.
Для более сложных ограничений или для замены штатных сообщений об ошибках валидации на более понятные можно использовать Constraint Validation API.
Примечание: Валидация ограничений на стороне клиента не отменяет необходимости производить валидацию на стороне сервера. Даже при том, что валидация на стороне клиента может предотвратить многие распространённые типы невалидных значений, они всё ещё могут быть отправлены устаревшими браузерами или злоумышленниками, которые пытаются навредить вашему веб-приложению. Следовательно, вам по-прежнему нужно валидировать значения как на стороне клиента, так и на стороне сервера. Валидация на стороне клиента даёт пользователю быструю обратную связь, повышая удобство работы с интерфейсом. Но вы не должны полностью полагаться на неё в вопросе проверки данных, которые отправляются на сервер.
Валидация ограничений с помощью Constraint Validation API выполняется либо для одного элемента формы, либо на уровне всей формы для элемента {{ HTMLElement("form") }}.
Constraint Validation API расширяет перечисленные ниже интерфейсы элементов формы рядом новых свойств и методов (элементы, которые могут иметь атрибут form
, указывающий на содержащую их форму):
HTMLButtonElement
HTMLFieldsetElement
HTMLInputElement
HTMLObjectElement
HTMLOutputElement
HTMLSelectElement
HTMLTextAreaElement
ValidityState
, содержащий ошибки валидации значения данного элемента.true
, если элемент является кандидатом на участие в валидации; и false
в противном случае. Элементы с интерфейсом HTMLObjectElement
никогда не являются кандидатами на участие в валидации. Другим может быть запрещено участвовать в валидации ограничений в зависимости от конкретных условий.false
; если значение валидно, возвращает true
.false
, а затем сообщает пользователю о статусе валидности любым способом, доступным пользовательскому агенту. Если значение валидно, возвращает true
.Рассмотрим следующую форму:
<form> <label for="name">Enter username (upper and lowercase letters): </label> <input type="text" name="name" id="name" required pattern="[A-Za-z]+"> <button>Submit</button> </form>
Если вы попытаетесь отправить форму с пустым полем, или полем, значение которого не соответствует шаблону в атрибуте pattern
(только строчные и заглавные латинские буквы), базовый механизм валидации HTML-формы приведёт к появлению сообщения об ошибке, дизайн которого определяется браузером и операционной системой.
Если вы хотите вместо этого отобразить своё сообщение об ошибке, вам потребуется написать JavaScript-код вроде того, что показан ниже:
const nameInput = document.querySelector('input'); nameInput.addEventListener('input', () => { nameInput.setCustomValidity(''); nameInput.checkValidity(); }); nameInput.addEventListener('invalid', () => { if(nameInput.value === '') { nameInput.setCustomValidity('Enter your username!'); } else { nameInput.setCustomValidity('Usernames can only contain upper and lowercase letters. Try again!'); } });
Живой пример формы со своим сообщением об ошибке:
{{EmbedLiveSample('Examples')}}
Как это работает:
checkValidity()
через обработчик события input
.invalid
и срабатывает обработчик события invalid
. Внутри обработчика с помощью условия if...else
мы выясняем, почему значение является невалидным: из-за того, что строка пустая или потому что она не соответствует шаблону, и в зависимости от условия задаём своё сообщение об ошибке валидации.setCustomValidity()
с пустой строкой в качестве аргумента. В примере это происходит каждый раз, когда случается событие input
. Если этого не сделать, браузер будет показывать ошибку валидации, указанную ранее, даже если поле в данный момент содержит валидные данные.Примечание: На протяжении многих версий браузер Firefox поддерживал собственный атрибут ошибки x-moz-errormessage
, который позволял аналогичным образом устанавливать свои сообщения об ошибке. Данный атрибут был удалён в версии 66 (смотрите bug 1513890).
<input>
<select>
<textarea>
Свойства {{domxref('ValidityState')}}
: {{domxref('validityState.badInput', 'badInput')}}, {{domxref('validityState.customError','customError')}}, {{domxref('validityState.patternMismatch','patternMismatch')}}, {{domxref('validityState.rangeOverflow','rangeOverflow')}}, {{domxref('validityState.rangeUnderflow','rangeUnderflow')}}, {{domxref('validityState.stepMismatch','stepMismatch')}}, {{domxref('validityState.tooLong','tooLong')}}, {{domxref('validityState.tooShort','tooShort')}}, {{domxref('validityState.typeMismatch','typeMismatch')}}, {{domxref('validityState.valid','valid')}} и {{domxref('validityState.valueMissing','valueMissing')}}.