Любовь - это здорово, но не как пароль. - Мэтт Мулленвег

Предотвращение плохой формы информации - это смертельная игра для кошек и кошек. Как веб-разработчики, мы хотим защитить информацию, заполняемую в полях форм. Плохая информация приводит к плохому взаимодействию с пользователем, плохой аналитике и плохим продажам.

Возьмите все важное поле электронная почта. Адреса электронной почты всегда должны иметь одинаковую структуру: [email protected]. Пример из реальной жизни: [email protected]. Поле формы электронной почты должно проверять, правильно ли пользователь ввел адрес электронной почты. В адресе электронной почты есть текст, за которым следует символ @, затем имя домена, точка (.) И, наконец, расширение. Это много, чтобы проверить.

Извечный вопрос: «Где мы проверяем правильность ввода: на стороне сервера или на стороне клиента?» Проверка на стороне сервера влечет за собой отправку пользователем формы на сервер, например ASP, C # или PHP, затем код сервера проверяет и возвращает ошибку, если обнаруживает ее. Это долгая и дорогостоящая поездка. Проверка на стороне клиента обычно означает: JavaScript перехватывает форму перед ее отправкой для проверки на наличие ошибок, возможно, с использованием регулярного выражения. Это экономит время на пути к серверу, но по-прежнему требует небольшого количества кода. Хотя мы все еще должны использовать проверку на стороне сервера, я собираюсь обсудить, как мы можем максимально использовать проверку на стороне клиента, чтобы уменьшить количество запросов к серверу.

HTML5 предоставил нам несколько <input> типов, таких как «число», «дата» и «электронная почта».

<input type="email" id="emailField">

По умолчанию поля ввода электронной почты отслеживают состояние введенного текста, как если бы мы использовали JavaScript и регулярное выражение для проверки шаблона. Если бы вы хотели написать такое же регулярное выражение, это выглядело бы так:

/^[a-zA-Z0–9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0–9](?:[a-zA-Z0–9-]{0,61} [a-zA-Z0–9])?(?:\.[a-zA-Z0–9](?:[a-zA-Z0–9-]{0,61}[a-zA-Z0–9])?)*$/

Источник: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#Basic_validation

Используя тип электронной почты, мы можем проверить правильность поля формы с помощью функции javascript, называемой… checkValidity(). Эта функция возвращает значение истина | ложь. checkValidity() будет смотреть на тип ввода, а также на то, был ли установлен атрибут required и какой-либо тег pattern="".

<input type="email" id="emailField" required>

Поддержка checkValidity() работает для всех браузеров, включая IE10 и iOS. Https://caniuse.com/#feat=form-validation

const isValidEmail = emailField.checkValidity();

Мы можем проверить значения формы перед ее отправкой.

if ( isValidEmail ) {
  ...submit the form
} else {
  ...notify user
}

Проверка типа пользователя - это вопрос добавления нужного прослушивателя событий в поле ввода. Использование keyup дает немедленную обратную связь, когда пользователь вводит текст в само поле ввода.

emailField.addEventListener('keyup', function (event) {
  isValidEmail = emailField.checkValidity();
});

Мы также можем запретить пользователю отправлять форму до тех пор, пока текст не станет действительным. Добавление disabled в <button> предотвратит отправку, и после проверки действительности мы можем снова включить его. Отключенное состояние позволяет пользователям знать, что форму необходимо правильно заполнить, и предотвращает любые нежелательные отправления.

<button id="okButton" disabled>OK</button>

Проверяя действительность, мы можем изменить состояние кнопки с помощью .disabled = true|false:

if ( isEmailValid ) {
  okButton.disabled = false;
} else {
  okButton.disabled = true;
}

Собираем все вместе, это может выглядеть так:

Нам больше не нужны сумасшедшие длинные шаблоны регулярных выражений для проверки полей формы. Используя доступные нам атрибуты html, а также некоторые трудолюбивые встроенные функции JavaScript, мы можем выполнять простую проверку формы на стороне клиента.

Бонусная проверка - стили

Поля ввода имеют псевдоклассы css, доступные для визуального оповещения пользователей о том, что поле находится в состоянии ошибки: :valid и:invalid.

.email-field:valid {
  border-color: black;
}
.email-field:invalid {
  border-color: red;
}

В качестве дополнительного бонуса Chrome и Firefox будут отображать всплывающую подсказку об ошибке.

Джошуа Стадли - старший инженер по интерфейсу в Kelley Blue Book. Он имеет более чем 15-летний опыт веб-разработки интерфейсов и работал с ведущими интерактивными компаниями в различных областях, от медицинского программного обеспечения до автомобильных СМИ. Джош также преподает полноценную веб-разработку на UCI Coding Bootcamp. Когда Джош не создает веб-сайты, он создает веб-сайты. Шутки в сторону.