Маска ввода телефона в input на чистом JS

Маска ввода телефона в input на чистом JS Верстка

В одном уроке я уже писал про маски ввода при помощи jQuery плагина maskedinput. Данная библиотека довольно тяжелая, да и не все в последнее время используют jQuery. Поэтому решил поделится небольшим скриптом на нативном .js (830 байт), который работает без каких либо дополнительных библиотек.

HTML разметка input

<input value="" class="tel">

Все стандартно, маска будет добавляться к импутам с классом «tel».

JS код маски

window.addEventListener("DOMContentLoaded", function() {
  [].forEach.call( document.querySelectorAll('.tel'), function(input) {
    var keyCode;
    function mask(event) {
      event.keyCode && (keyCode = event.keyCode);
      var pos = this.selectionStart;
      if (pos < 3) event.preventDefault();
      var matrix = "+7 (___) ___ ____",
          i = 0,
          def = matrix.replace(/\D/g, ""),
          val = this.value.replace(/\D/g, ""),
          new_value = matrix.replace(/[_\d]/g, function(a) {
              return i < val.length ? val.charAt(i++) : a
          });
      i = new_value.indexOf("_");
      if (i != -1) {
          i < 5 && (i = 3);
          new_value = new_value.slice(0, i)
      }
      var reg = matrix.substr(0, this.value.length).replace(/_+/g,
          function(a) {
              return "\\d{1," + a.length + "}"
          }).replace(/[+()]/g, "\\$&");
      reg = new RegExp("^" + reg + "$");
      if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
        this.value = new_value;
      }
      if (event.type == "blur" && this.value.length < 5) {
        this.value = "";
      }
    }

    input.addEventListener("input", mask, false);
    input.addEventListener("focus", mask, false);
    input.addEventListener("blur", mask, false);
    input.addEventListener("keydown", mask, false);

  });

});
Смотреть demo
Скачать js скрипт маски ввода

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( 10 оценок, среднее 4.2 из 5 )
Web-Revenue.ru
Добавить комментарий

  1. Кир

    Огромное спасибо! Ты сэкономил мне пару часов жизни!

    Ответить
    1. Алексей автор

      Всегда пожалуйста)))

      Ответить
  2. Pavel

    Молодец, чувак, но твоя маска сыро вата..
    ну форматирует данные, а если не до конца введено, то ей пофигу))
    вспомни как $.mask() работает)))

    Ответить
    1. Алексей автор

      Для моих целей достаточно, главное что страницу не грузит (пару строк кода), а проверку на количество символов я обычно модулями CMS делаю (чтобы форма не отправлялась с неполным номером). Так же можно прямо средствами HTML проверять, импуту укажите minlength="13".

      Ответить
  3. Айрат

    Спасибо, очень удобно что без сторонних библиотек используется!

    Ответить
    1. Алексей автор

      Пожалуйста, пользуйтесь)

      Ответить
  4. Олег

    Здравствуйте, если использовать автозаполнение на ios, то номер не полностью стирается. Багует с номером вида +7 (000) 000-00-00

    Ответить
    1. Алексей автор

      Здравствуйте. Поправил в коде 2 строчки. Теперь код должен корректно стирать номер телефона при использовании автозаполнения на iOS. На данный момент нет девайсов на iOS чтобы проверить. Посмотрите на демо.

      Ответить
  5. Nickulas

    все ок, но как решить проблему, что при редактировании номера новые символы печатаются в конце строки, а не на месте старых? при этом, с последними 4 символами все ок

    Ответить
  6. 433

    alert(‘воу’)

    Ответить
  7. Виктор

    Здравствуйте. Подскажите, пожалуйста, а как сделать, чтобы +7 не выводилось сразу при клике по полю инпута, а только при вводе первой цифры? Например, кликаю по полю — ничего не выводится. Набираю на клавиатуре цифру 8 или любую другую цифру — выводится +7

    Ответить
  8. Аноним

    Спасибо! Изучаю JS, и Ваш скрипт очень помогает узнать что-то новое.

    Ответить
    1. Голягин Алексей

      Пожалуйста)

      Ответить
  9. Аноним

    Спасибо! На лендинге форма в шапке работает.
    Если не сложно, ответьте, пожалуйста.
    Вопросы:
    1. На popup при подключенных файлах скриптов перестала вообще отправляться форма, хотя и пишет, что ОТПРАВЛЕНО
    2. Как бы сделать еще проверку на ПОЛНОСТЬЮ введенный телефон, чтобы пользователи не могли 3 символа по маске отправить.

    Ответить
    1. Голягин Алексей

      Ну как вариант, попробуйте так:

      Ответить
  10. Аноним

    Спасибо!

    Ответить