Любовь - это здорово, но не как пароль. - Мэтт Мулленвег
Предотвращение плохой формы информации - это смертельная игра для кошек и кошек. Как веб-разработчики, мы хотим защитить информацию, заполняемую в полях форм. Плохая информация приводит к плохому взаимодействию с пользователем, плохой аналитике и плохим продажам.
Возьмите все важное поле электронная почта. Адреса электронной почты всегда должны иметь одинаковую структуру: [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. Когда Джош не создает веб-сайты, он создает веб-сайты. Шутки в сторону.