Маски ввода для текстовых полей
В этой демонстрации вы научитесь работать с масками ввода для текстовых полей форм.
Маски ввода позволяют указать формат допустимых значений для текстовых полей. Например, маска для телефона может выглядеть как +7 (___) ___-__-__
.
Попутно обсудим, чем хорошая маска отличается от плохой.
Начнём с создания формы, в которой будет текстовое поле ввода.
Добавим поле ввода <input>
для номера телефона и подпись <label>
для повышения доступности интерфейса. Скроем <label>
со всем уважением к стандартам доступности. Стилизацию разбирать не будем.
Для <input>
укажем атрибуты:
class
— понадобиться для связывания с JS;type="tel"
— для корректного отображения клавиатуры на мобильных устройствах;id
— для связывания с <label>
;name
— для отправки данных на сервер;placeholder
— для подсказки пользователю.
Подключим библиотеку для работы с масками imask.js.
В демонстрации библиотека подключается локально. Вы можете подключить библиотеку по внешней ссылке:
<script src="https://unpkg.com/imask"></script>
Создадим файл script.js
и подключим его сразу после библиотеки. script.js
понадобится для настройки параметров маски ввода.
Перейдём в файл script.js
и начнём настройку маски. Для начала найдём и сохраним единственный <input>
с телефоном, у которого будет маска.
Начнём создавать конфигурацию маски.
Определимся с форматом номера телефона. В нём будет несколько частей:
+7
— код страны;
— пробел между кодом страны и кодом оператора;(800)
— код оператора в круглых скобках;
— пробел между кодом оператора и номером абонента;555-86-26
— номер абонента, разделённый дефисами xxx-xx-xx
.
Создадим шаблон маски ввода для нужного нам формата номера телефона.
IMask
умная библиотека с простым принципом создания шаблонов: все символы, которые можно менять, задаём как 0
, все символы, которые нельзя менять, задаём «как есть» (в том числе и пробелы).
То есть для нашего формата телефона шаблон выглядит как +7 (000) 000-00-00
.
Маска создана. Осталось её подключить и проверить как она работает. Для этого вызовем функцию IMask()
, в которую передадим элемент <input>
и настройки маски.
Теперь попробуйте ввести любой номер телефона. Это работает! 😱
Обратите внимание, что буквы невозможно ввести.
Чем хороша эта маска? Тем, что номер телефона можно начать вводить как с +
, так и с 7
. А можно начать сразу с кода оператора, например, с 921
.
Введите сначала 7921
. Потом удалите результат и введите 921
. Разницы не будет.
Пользователь всегда тревожится и не понимает, с какой цифры ему начинать вводить номер телефона. Такой подход снизит тревогу.
Маска не должна мешать вводу данных в input
. Это самое главное правило, которому вы должны следовать при подключении маски. Ввод номера телефона может быть не только с клавиатуры, но и из буфера обмена.
Выделите по очереди номера телефонов из списка ниже, скопируйте в буфер обмена с помощью Ctrl + C
и вставьте в input
с помощью Ctrl + V
.
+7 (800) 555-86-28
+7800 555-86-28
+7800555-86-28
+78005558628
8005558628
Как видите, маска отработала для всех вариантов написания номера.
Маски можно использовать не только для номеров телефонов, но и для любых данных, которые нужно привести к определенному формату. Например, для номера карты, почты, даты и так далее.
Давайте создадим маску для номера карты. Она должна иметь вид: 0000 0000 0000 0000
. Введите любые 16 цифр, чтобы увидеть, как работает маска.
Создать input
, который принимает дату рождения по маске, также достаточно просто.
Чтобы вывести подсказку по заполнению можно указать lazy: false
. В этом случае появятся «платформы» для каждого символа.
Пока задача с датой решена плохо, можно ввести 99
марта 9999
года.
Чтобы маска учитывала корректность введённых дат, нужно задать маске тип Date
. Также можно указать минимальную и максимальную даты.
Создадим маску для целых чисел, которая по мере ввода будет добавлять разделитель разрядов. Для этого укажем тип маски Number
. И добавим параметр thousandsSeparator
, в значении которого укажем ' '
(пробел как разделитель разрядов).
Попробуйте ввести длинное число, а также поменять значение разделителя.
Вот так легко и просто можно создавать типовые маски ввода с помощью библиотеки IMask. О всех возможностях библиотеки читайте в документации.
Демонстрация завершена.