Назад

Маска ввода телефона: улучшение UX и стандартизация данных

Главная
Блог
Маска ввода телефона: улучшение UX и стандартизация данных

Маски ввода для телефонных номеров решают три ключевые задачи:

  1. Улучшение UX – визуальное руководство для пользователя.

  2. Предотвращение ошибок – блокировка неверных символов.

  3. Стандартизация – единый формат данных для обработки.

Рассмотрим реализацию на Inputmask и альтернативы.

1. Подключение библиотек

Требования:

  • Обязателен jQuery (версии 1.7+).

  • Inputmask поддерживает и "ванильный" JavaScript, но с jQuery интеграция проще.

Подключение:

<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- Inputmask -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/5.0.6/jquery.inputmask.min.js"></script>

Ссылки:

2. Базовая настройка Inputmask

Пример для поля с ID #phone:

$("#phone").inputmask("+7 (999) 999-99-99", {
  placeholder: "_", // Символ-заполнитель
  clearIncomplete: true, // Автоочистка неполных вводов
  showMaskOnHover: false // Отключение подсказки при наведении
});

Плюсы Inputmask:

  • Поддержка динамических масок (настраиваемые правила для разных символов).

  • Валидация на лету.

  • Широкая поддержка браузеров (включая IE9+).

Минусы:

  • Размер библиотеки (~45 KB минифицированной).

  • Может конфликтовать с другими плагинами, модифицирующими value поля.

3. Решение для AJAX и Битрикс

Проблема: В CMS Битрикс маска сбрасывается после AJAX-обновления (например, в компоненте заказа).

Решение:

BX.addCustomEvent('onAjaxSuccess', function() {
  $("#soa-property-3").inputmask("+7 (999) 999-99-99");
});

Совет: Для динамических полей используйте делегирование:

$(document).on('focus', '.js-phone-input', function() {
  $(this).inputmask("+7 (999) 999-99-99");
});

4. Альтернатива: jQuery Masked Input

Для легких проектов подойдет jQuery Masked Input:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>

Настройка:

$(".js-phone-mask").mask("+7 (999) 999-99-99");

Плюсы:

  • Миниатюрный размер (~4 KB).

  • Простота настройки.

Минусы:

  • Нет встроенной валидации.

  • Устаревший код (последнее обновление — 2015 г.).

Дополнительные рекомендации

  1. Валидация:

    • Добавьте проверку на сервере, даже если маска корректна на клиенте.

    • Используйте inputmode="tel" для мобильных устройств:

      <input type="tel" id="phone" inputmode="tel">

  2. Международные форматы:
    Inputmask поддерживает маски для разных стран:

    $("#international-phone").inputmask("+9 (999) 999-99[99]");

  3. Альтернативы без jQuery:

    • Cleave.js – легковесный и современный.

    • libphonenumber – продвинутая валидация от Google.

Вывод

  • Inputmask – лучший выбор для сложных проектов с AJAX.

  • Masked Input подойдет для простых сайтов без частых обновлений DOM.

  • Cleave.js или ванильные решения – оптимальны для современных приложений без jQuery.

Финальный совет: Протестируйте маску на реальных пользователях — иногда строгий формат увеличивает число отказов!

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи