Телефонные номера — один из самых распространённых типов данных в веб-формах. Пользователь может вводить номер в произвольном формате: со скобками, пробелами, дефисами, кодом страны или без него. Без маски поле быстро превращается в источник ошибок и несогласованных данных.
Библиотека Inputmask позволяет жёстко контролировать формат ввода телефонных номеров, автоматически подставлять разделители, ограничивать набор допустимых символов и поддерживать динамическое изменение шаблонов.
Телефонные маски особенно важны для:
Наиболее базовый вариант — фиксированный шаблон номера.
<input id="phone">
Inputmask("+7 (999) 999-99-99").mask("#phone");
Результат ввода:
+7 (___) ___-__-__
Каждая цифра вводится строго в заданную позицию.
+7 (999) 999-99-99
+7 — статическая часть;9 — обязательная цифра;Пользователь не вводит разделители вручную — библиотека делает это автоматически.
Телефонные маски почти всегда настраиваются через объект параметров.
Inputmask({
mask: "+7 (999) 999-99-99"
}).mask("#phone");
Такой подход удобнее при большом количестве настроек.
Для международных номеров длина кода страны может отличаться.
Inputmask({
mask: "+9{1,3} (999) 999-9999"
}).mask("#phone");
+9{1,3}
означает:
Допустимые варианты:
+1
+44
+380
Некоторые номера содержат добавочный код.
Inputmask({
mask: "+7 (999) 999-99-99[ доб. 9999]"
}).mask("#phone");
Квадратные скобки обозначают необязательный блок.
Возможные варианты:
+7 (999) 123-45-67
+7 (999) 123-45-67 доб. 1234
По умолчанию маска может отображаться сразу после фокуса на поле.
Inputmask({
mask: "+7 (999) 999-99-99",
showMaskOnFocus: true
}).mask("#phone");
Если необходимо скрыть шаблон до начала ввода:
Inputmask({
mask: "+7 (999) 999-99-99",
showMaskOnFocus: false
}).mask("#phone");
Параметр:
showMaskOnHover
управляет поведением маски при наведении курсора.
Inputmask({
mask: "+7 (999) 999-99-99",
showMaskOnHover: false
}).mask("#phone");
Символ заполнителя задаётся через placeholder.
Inputmask({
mask: "+7 (999) 999-99-99",
placeholder: "_"
}).mask("#phone");
Результат:
+7 (___) ___-__-__
Можно использовать любой символ.
Inputmask({
mask: "+7 (999) 999-99-99",
placeholder: "*"
}).mask("#phone");
Результат:
+7 (***) ***-**-**
Если пользователь ввёл номер не полностью, поле может автоматически очищаться.
Inputmask({
mask: "+7 (999) 999-99-99",
clearIncomplete: true
}).mask("#phone");
Пример:
+7 (999) 12
После потери фокуса поле станет пустым.
Иногда серверу нужен только набор цифр.
Inputmask({
mask: "+7 (999) 999-99-99",
removeMaskOnSubmit: true
}).mask("#phone");
Тогда вместо:
+7 (999) 123-45-67
будет отправлено:
79991234567
Метод unmaskedvalue() возвращает только введённые
символы.
const input = document.getElementById("phone");
console.log(input.inputmask.unmaskedvalue());
Результат:
79991234567
Метод isComplete() определяет, полностью ли введён
номер.
const isComplete = input.inputmask.isComplete();
console.log(isComplete);
Результат:
true
false
В разных странах используются разные форматы телефонов.
Inputmask({
mask: [
"+7 (999) 999-99-99",
"+1 (999) 999-9999"
]
}).mask("#phone");
Библиотека автоматически подбирает подходящий шаблон.
Inputmask поддерживает изменение шаблона во время ввода.
Inputmask({
mask: [
"+7 (999) 999-99-99",
"+375 (99) 999-99-99"
],
keepStatic: false
}).mask("#phone");
keepStaticЕсли:
keepStatic: true
библиотека старается удерживать текущую маску.
Если:
keepStatic: false
маска свободно переключается между шаблонами.
Можно разделять форматы по длине номера.
Inputmask({
mask: [
"(999) 999-99-99",
"(9999) 99-99-99"
]
}).mask("#phone");
Для нестандартных номеров можно использовать regex-маску.
Inputmask({
regex: "\\+\\d{1,3}\\s\\d{10}"
}).mask("#phone");
Подход полезен при сложной международной логике.
Часто код страны должен присутствовать всегда.
Inputmask({
mask: "+7 (999) 999-99-99",
insertMode: false
}).mask("#phone");
Пользователь вводит только оставшиеся цифры.
greedyПараметр управляет поведением повторяющихся блоков.
Inputmask({
mask: "+9{1,3} (999) 999-99-99",
greedy: false
}).mask("#phone");
Маска сразу резервирует максимум символов.
Маска расширяется постепенно по мере ввода.
Пользователь может вставить номер из буфера обмена.
Например:
89991234567
Inputmask автоматически преобразует ввод:
+7 (999) 123-45-67
Это одна из ключевых причин популярности библиотеки.
Параметр oncomplete вызывается после полного заполнения
номера.
Inputmask({
mask: "+7 (999) 999-99-99",
oncomplete: function () {
console.log("Номер заполнен");
}
}).mask("#phone");
Inputmask({
mask: "+7 (999) 999-99-99",
onincomplete: function () {
console.log("Номер введён не полностью");
}
}).mask("#phone");
Inputmask({
mask: "+7 (999) 999-99-99",
oncleared: function () {
console.log("Поле очищено");
}
}).mask("#phone");
В библиотеке существуют готовые псевдонимы.
Inputmask({
alias: "phone"
}).mask("#phone");
Однако на практике телефонные маски чаще задаются вручную, поскольку формат зависит от страны и требований проекта.
<input class="phone">
<input class="phone">
<input class="phone">
Inputmask("+7 (999) 999-99-99")
.mask(".phone");
Маска применится ко всем элементам.
Если поле добавляется после загрузки страницы:
const input = document.createElement("input");
document.body.appendChild(input);
Inputmask("+7 (999) 999-99-99")
.mask(input);
const phones = document.querySelectorAll(".phone");
Inputmask("+7 (999) 999-99-99")
.mask(phones);
Inputmask долгое время активно использовался вместе с jQuery.
$("#phone").inputmask("+7 (999) 999-99-99");
const input = document.getElementById("phone");
input.inputmask.remove();
После этого поле становится обычным текстовым input.
input.inputmask.remove();
Inputmask("+1 (999) 999-9999")
.mask(input);
Подход используется при переключении страны.
<select id="country">
<option value="ru">Россия</option>
<option value="us">USA</option>
</select>
<input id="phone">
const phone = document.getElementById("phone");
const country = document.getElementById("country");
country.addEventListener("change", () => {
phone.inputmask?.remove();
if (country.value === "ru") {
Inputmask("+7 (999) 999-99-99")
.mask(phone);
} else {
Inputmask("+1 (999) 999-9999")
.mask(phone);
}
});
inputmodeДля мобильных устройств рекомендуется:
<input id="phone" inputmode="tel">
Это помогает открыть цифровую клавиатуру.
Маска не заменяет полноценную проверку номера.
Например:
+7 (111) 111-11-11
формально соответствует шаблону, но может быть несуществующим номером.
Поэтому обычно используются:
type="number"Неправильно:
<input type="number">
Телефон — не число, а строка.
Правильно:
<input type="tel">
Некоторые разработчики удаляют символ +.
В международных форматах это приводит к неоднозначности.
Плохой пример:
"+7 (999) 999-99-99"
если проект работает с несколькими странами.
В международных сервисах лучше использовать динамические шаблоны.
Если сервер ожидает:
79991234567
а получает:
+7 (999) 123-45-67
могут возникать ошибки обработки.
<form id="form">
<input id="phone" type="tel">
<button>Отправить</button>
</form>
Inputmask({
mask: "+7 (999) 999-99-99",
clearIncomplete: true,
removeMaskOnSubmit: true
}).mask("#phone");
Поведение:
Правильно настроенная маска:
Неправильно настроенная маска:
Поэтому телефонные маски требуют аккуратной настройки под конкретную задачу и аудиторию проекта.