Inputmask — библиотека для JavaScript, предназначенная для создания масок ввода в текстовых полях формы. Маска определяет структуру вводимых данных и ограничивает формат значения ещё на этапе набора текста. Это позволяет контролировать корректность пользовательского ввода без необходимости вручную реализовывать сложную логику проверки.
Библиотека применяется для:
Основная задача Inputmask — обеспечить предсказуемый формат данных и улучшить взаимодействие с формами.
При отсутствии ограничений пользователь может вводить данные в произвольном виде:
+7 777 1234567
87771234567
7771234567
7-777-123-45-67
Все варианты могут обозначать один и тот же телефонный номер, но система получает разные строки. Это создаёт проблемы:
Inputmask решает эту проблему путём жёсткого или частично гибкого форматирования.
Библиотека накладывает шаблон на поле ввода и управляет:
Пример телефонной маски:
Inputmask("+7 (999) 999-99-99").mask(input);
Во время ввода:
+7 (___) ___-__-__
символы _ обозначают ожидаемые цифры.
npm install inputmask
Подключение:
import Inputmask from "inputmask";
<script src="https://cdnjs.cloudflare.com/ajax/libs/inputmask/5.0.9/inputmask.min.js"></script>
HTML:
<input id="phone">
Jav * aScript:
const input = document.getElementById("phone");
Inputmask("+7 (999) 999-99-99").mask(input);
После применения маски поле начинает контролировать формат ввода.
9В Inputmask используются специальные символы-маркеры.
Наиболее распространённый:
9
Обозначает обязательную цифру от 0 до 9.
Пример:
Inputmask("99/99/9999")
Результат:
12/05/2026
| Символ | Значение |
|---|---|
| 9 | Цифра |
| a | Буква |
| * | Буква или цифра |
Пример:
Inputmask("aa-999")
Допустимый ввод:
AB-123
Недопустимый:
12-ABC
mask()Метод mask() применяется к DOM-элементу.
Inputmask("999-999").mask(input);
Также возможно применение сразу к нескольким элементам:
Inputmask("999-999").mask(document.querySelectorAll("input"));
HTML:
<input data-inputmask="'mask': '+7 (999) 999-99-99'">
Jav * aScript:
Inputmask().mask(document.querySelectorAll("input"));
Такой подход удобен при большом количестве полей.
Inputmask("99.99.9999").mask(input);
Результат:
31.12.2026
Однако такая маска проверяет только структуру, а не корректность даты.
Например:
99.99.9999
формально соответствует шаблону.
Alias — готовые встроенные маски.
Пример даты:
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy"
}).mask(input);
Преимущества alias:
Inputmask("99:99").mask(input);
Более корректный вариант:
Inputmask({
alias: "datetime",
inputFormat: "HH:MM"
}).mask(input);
Inputmask поддерживает числовые форматы.
Пример:
Inputmask({
alias: "numeric",
groupSeparator: " ",
radixPoint: ".",
digits: 2,
digitsOptional: false,
prefix: "$ "
}).mask(input);
Результат:
$ 12 500.00
Inputmask("9999 9999 9999 9999").mask(input);
Во время ввода номер автоматически разбивается на блоки.
Inputmask({
alias: "ip"
}).mask(input);
Пример:
192.168.0.1
Inputmask({
alias: "email"
}).mask(input);
Inputmask ограничивает структуру адреса электронной почты.
Placeholder отображает незаполненные позиции.
Пример:
Inputmask({
mask: "99/99/9999",
placeholder: "д"
}).mask(input);
Результат:
дд/дд/дддд
Опция:
clearIncomplete: true
Пример:
Inputmask({
mask: "+7 (999) 999-99-99",
clearIncomplete: true
}).mask(input);
Если ввод не завершён, поле очищается при потере фокуса.
Опция:
showMaskOnHover
showMaskOnFocus
Пример:
Inputmask({
mask: "99/99/9999",
showMaskOnHover: false
}).mask(input);
Иногда серверу требуется значение без форматирования.
Например:
+77771234567
а не:
+7 (777) 123-45-67
Для этого используется:
removeMaskOnSubmit: true
Пример:
Inputmask({
mask: "+7 (999) 999-99-99",
removeMaskOnSubmit: true
}).mask(input);
Метод:
unmaskedvalue()
Пример:
const im = new Inputmask("+7 (999) 999-99-99");
im.mask(input);
console.log(input.inputmask.unmaskedvalue());
Результат:
7771234567
Inputmask поддерживает несколько шаблонов одновременно.
Пример:
Inputmask({
mask: [
"+7 (999) 999-99-99",
"+1 (999) 999-9999"
]
}).mask(input);
Библиотека автоматически выбирает подходящий формат.
Inputmask умеет работать через регулярные выражения.
Пример:
Inputmask({
regex: "[A-Za-z]{3}[0-9]{3}"
}).mask(input);
Допустимое значение:
ABC123
Можно создавать собственные типы символов.
Пример:
Inputmask.extendDefinitions({
"~": {
validator: "[+-]"
}
});
Использование:
Inputmask("~999").mask(input);
Допустимые значения:
+123
-456
Библиотека поддерживает обработчики событий.
Пример:
Inputmask({
mask: "9999",
oncomplete: function () {
console.log("Ввод завершён");
},
onincomplete: function () {
console.log("Ввод не завершён");
}
}).mask(input);
Пример:
import Inputmask from "inputmask";
import { useEffect, useRef } from "react";
function PhoneInput() {
const ref = useRef(null);
useEffect(() => {
Inputmask("+7 (999) 999-99-99").mask(ref.current);
}, []);
return <input ref={ref} />;
}
mounted() {
Inputmask("+7 (999) 999-99-99")
.mask(this.$refs.phone);
}
Inputmask долгое время активно использовался вместе с jQuery.
$("#phone").inputmask("+7 (999) 999-99-99");
Inputmask корректно работает:
Однако некоторые мобильные клавиатуры могут влиять на поведение курсора и placeholder.
При вставке значения библиотека пытается преобразовать данные под шаблон.
Например:
7771234567
автоматически становится:
+7 (777) 123-45-67
Опция:
nullable: true
Позволяет возвращать null, если поле пустое.
Inputmask не заменяет полноценную серверную проверку.
Маска:
99.99.9999
не гарантирует существование даты.
Маска контролирует:
Полная проверка данных должна выполняться отдельно.
Пользователь вводит данные только в нужном формате.
Форма становится более предсказуемой.
Минимизируется вероятность некорректного ввода.
Библиотека поддерживает:
Практически все аспекты поведения можно переопределить.
Необходимо дополнительно проверять данные.
Продвинутые маски могут быть трудны в поддержке.
Слишком жёсткие маски иногда мешают вводу.
Библиотека добавляет JavaScript-код и обработчики событий.
Наиболее распространённые сценарии:
Inputmask работает поверх обычного <input> и не
требует создания специальных компонентов.
Библиотека:
Благодаря этому Inputmask может интегрироваться практически в любой frontend-проект.