При помощи JavaScript можно проводить валидацию (проверку данных) форм HTML.
Например, в следующем примере если поле формы (fname) пусто, то функция выводит сообщение с предупреждением и возвращает значение false, чтобы предотвратить отправку данных формы:
JavaScript
function validateForm() {
var x = document.forms["myForm"]["fname"].value;
if (x == "") {
alert("Необходимо ввести имя");
return false;
}
}
Функцию можно вызывать при возникновении события отправки данных формы:
HTML
<form name="myForm" action="//msiter.ru/action_page.php" onsubmit="return validateForm()" method="post">
Имя: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
JavaScript может проверять ввод чисел
Часто JavaScript используется для проверки введенных чисел. Попробуйте сами:
Введите число от 1 до 10
Автоматическая проверка HTML форм
Проверка HTML форм также может проводиться браузером автоматически.
В следующем примере, если поле формы (fname) пусто, атрибут required запрещает отправку данных формы:
<form action="//msiter.ru/action_page.php" method="post">
<input type="text" name="fname" required>
<input type="submit" value="Submit">
</form>
Внимание! Автоматическая проверка HTML форм не работает в Internet Explorer 9 и более ранних его версиях.
Проверка данных
Проверка данных проводится для того, чтобы гарантировать, что пользователь ввел корректные, полезные данные без ошибок.
Типичная проверка состоит в поиске ответов на следующие вопросы:
- Заполнил ли пользователь все необходимые поля?
- Корректны ли введенные данные?
- Не ввел ли пользователь текст в поля для цифр?
Таким образом, цель проверки данных заключается в обеспечении корректного пользовательского ввода.
Проверка может осуществляться разными способами и реализовываться разными путями.
Проверка на стороне сервера осуществляется веб-сервером после получения им введенных данных.
Проверка на стороне клиента осуществляется браузером до отсылки введенных данных на сервер.
Ограничивающая проверка HTML
В HTML5 была добавлена новая концепция HTML проверки, название которой можно было бы перевести как "ограничивающая проверка" (англ. Constraint Validation).
Ограничивающая проверка HTML основывается на:
- HTML атрибутах элемента ввода,
- CSS псевдоселекторах,
- свойствах и методах DOM
Атрибуты ограничивающей проверки элемента ввода
Атрибут | Описание |
---|---|
disabled | Определяет, что элемент ввода отключен |
max | Определяет максимальное значение в элементе ввода |
min | Определяет минимальное значение в элементе ввода |
pattern | Определяет шаблон значений в элементе ввода |
required | Определяет, что элемент ввода обязателен для заполнения |
type | Определяет тип элемента ввода |
Полный список атрибутов см. в справке по HTML тегу <input>.
CSS псевдоселекторы ограничивающей проверки
Селектор | Описание |
---|---|
:disabled | Выбирает элемент ввода с атрибутом "disabled" |
:invalid | Выбирает элемент ввода с некорректным значением |
:optional | Выбирает элемент ввода без атрибута "required" |
:required | Выбирает элемент ввода с атрибутом "required" |
:valid | Выбирает элемент ввода с корректным значением |
О том, что такое псевдоклассы см. раздел CSS псевдоклассы.
Методы DOM ограничивающей проверки
Метод | Описание |
---|---|
checkValidity() | Возвращает true, если элемент ввода содержит корректные данные |
setCustomValidity() | Устанавливает свойство validationMessage для элемента ввода |
Пример
Если поле ввода содержит некорректные данные, вывести сообщение:
<input id="id1" type="number" min="100" max="300" required>
<button onclick="myFunction()">OK</button>
<p id="demo"></p>
<script>
function myFunction() {
var inpObj = document.getElementById("id1");
if (!inpObj.checkValidity()) {
document.getElementById("demo").innerHTML = inpObj.validationMessage;
}
}
</script>
Свойства DOM ограничивающей проверки
Свойство | Описание |
---|---|
validity | Содержит набор свойств типа boolean, определяющих состояние валидности (правильности) элемента ввода |
validationMessage | Содержит сообщение, которое выведет браузер в случае неудачной проверки |
willValidate | Указывает, будет ли элемент ввода проверяться |
Свойства валидности
Свойство validity элемента ввода содержит некий набор свойств, определяющих состояние валидности данных:
Свойство | Описание |
---|---|
customError | Установлено в true, если задано пользовательское сообщение о валидности. |
patternMismatch | Установлено в true, если значение элемента не соответствует шаблону в атрибуте pattern. |
rangeOverflow | Установлено в true, если значение элемента больше значения в атрибуте max. |
rangeUnderflow | Установлено в true, если значение элемента меньше значения в атрибуте min. |
stepMismatch | Установлено в true, если значение элемента неверно по атрибуту step. |
tooLong | Установлено в true, если значение элемента превышает значение атрибута maxLength. |
typeMismatch | Установлено в true, если значение элемента неверно по атрибуту type. |
valueMissing | Установлено в true, если у элемента (с атрибутом required) нет значения. |
valid | Установлено в true, если значение элемента валидно. |
Пример №1. Свойство rangeOverflow.
Если число в поле ввода больше 100 (атрибут max элемента <input>), то вывести сообщение:
<input id="id1" type="number" max="100">
<button onclick="myFunction()">OK</button>
<p id="demo"></p>
<script>
function myFunction() {
var txt = "";
if (document.getElementById("id1").validity.rangeOverflow) {
txt = "Значение слишком большое";
}
document.getElementById("demo").innerHTML = txt;
}
</script>
Пример №2. Свойство rangeUnderflow.
Если число в поле ввода меньше 100 (атрибут min элемента <input>), то вывести сообщение:
<input id="id1" type="number" min="100">
<button onclick="myFunction()">OK</button>
<p id="demo"></p>
<script>
function myFunction() {
var txt = "";
if (document.getElementById("id1").validity.rangeUnderflow) {
txt = "Значение слишком маленькое";
}
document.getElementById("demo").innerHTML = txt;
}
</script>