Библиотека Inputmask представляет собой инструмент для наложения масок ввода на HTML-поля без привязки к конкретным фреймворкам. В Vanilla JavaScript подходе она используется напрямую через глобальный объект или импортируемый модуль, что обеспечивает максимальную гибкость и контроль над поведением ввода.
Основная цель библиотеки — структурировать пользовательский ввод в соответствии с заданным шаблоном: телефонные номера, даты, числовые значения, идентификаторы и любые пользовательские форматы.
Варианты подключения зависят от окружения.
<script src="https://cdnjs.cloudflare.com/ajax/libs/inputmask/5.0.8/inputmask.min.js"></script>
После подключения библиотека становится доступной через глобальный
объект Inputmask.
npm install inputmask
Использование в модульной среде:
import Inputmask from "inputmask";
В Vanilla JavaScript маска применяется напрямую к DOM-элементу.
<input id="phone" type="text" />
const phoneInput = document.getElementById("phone");
const mask = new Inputmask("+7 (999) 999-99-99");
mask.mask(phoneInput);
Ключевой момент заключается в том, что объект Inputmask
создаётся как экземпляр, после чего вызывается метод mask,
который связывает логику библиотеки с конкретным DOM-элементом.
Inputmask использует специальный набор символов для описания структуры ввода:
9 — обязательная цифра0 — необязательная цифраA — обязательная букваa — необязательная буква* — любой символПример маски для серийного кода:
const serialMask = new Inputmask("AA-9999-****");
serialMask.mask(document.getElementById("serial"));
Маску можно применять ко всем элементам, подходящим под селектор.
<input class="date" />
<input class="date" />
const dateMask = new Inputmask("99.99.9999");
document.querySelectorAll(".date").forEach((el) => {
dateMask.mask(el);
});
Такой подход позволяет централизованно управлять форматами ввода.
Помимо строковой маски, Inputmask поддерживает объект конфигурации.
const currencyMask = new Inputmask({
alias: "numeric",
groupSeparator: " ",
digits: 2,
digitsOptional: false,
prefix: "$ ",
rightAlign: false
});
currencyMask.mask(document.getElementById("price"));
Использование объектов позволяет управлять логикой форматирования, а не только структурой символов.
Алиасы представляют собой предустановленные конфигурации для типовых форматов.
const dateMask = new Inputmask({
alias: "datetime",
inputFormat: "dd/mm/yyyy"
});
dateMask.mask(document.getElementById("date"));
Алиасы значительно сокращают количество ручных настроек, предоставляя готовые шаблоны для распространённых сценариев.
Inputmask поддерживает расширенные шаблоны через регулярные выражения.
const regexMask = new Inputmask({
regex: "[A-Z]{3}-[0-9]{4}"
});
regexMask.mask(document.getElementById("code"));
Такой подход позволяет описывать сложные форматы, выходящие за пределы стандартных символов маски.
Маска может изменяться в процессе выполнения приложения.
const input = document.getElementById("dynamic");
const mask = new Inputmask("9999");
mask.mask(input);
mask.setOptions({
mask: "9999-9999"
});
Изменение параметров позволяет адаптировать ввод под контекст без повторного создания DOM-элемента.
В некоторых случаях требуется отключить форматирование.
Inputmask.remove(document.getElementById("phone"));
После удаления элемент возвращается к стандартному поведению HTML input.
Inputmask интегрируется с нативными событиями DOM.
const input = document.getElementById("phone");
input.addEventListener("complete", () => {
console.log("Ввод завершён");
});
input.addEventListener("incomplete", () => {
console.log("Ввод неполный");
});
Событие complete срабатывает при полном заполнении
маски, incomplete — при её нарушении.
Особое значение имеет работа с числами и валютами.
const numericMask = new Inputmask({
alias: "numeric",
digits: 0,
groupSeparator: ",",
autoGroup: true
});
numericMask.mask(document.getElementById("count"));
Такая конфигурация обеспечивает автоматическое форматирование больших чисел с разделителями разрядов.
Inputmask позволяет добавлять фиксированные элементы вокруг вводимого значения.
const percentMask = new Inputmask({
alias: "numeric",
suffix: " %",
rightAlign: false
});
percentMask.mask(document.getElementById("percent"));
Префиксы и суффиксы не участвуют в значении поля, но влияют на отображение.
Библиотека корректно обрабатывает вставку текста из буфера обмена.
const input = document.getElementById("code");
input.addEventListener("paste", (e) => {
console.log("Вставка значения:", e.clipboardData.getData("text"));
});
Inputmask автоматически фильтрует вставленные данные согласно заданной маске, удаляя лишние символы.
Значение можно устанавливать программно без нарушения маски.
const input = document.getElementById("phone");
const mask = new Inputmask("+7 (999) 999-99-99");
mask.mask(input);
input.inputmask.setValue("71234567890");
Метод setValue гарантирует корректное форматирование при
программной установке.
Маска может скрывать форматирование при необходимости получения данных.
const value = input.inputmask.unmaskedvalue();
console.log(value);
Это особенно важно при отправке данных на сервер, где требуется необработанное значение.
Inputmask поддерживает условное поведение через callback-функции.
const mask = new Inputmask({
mask: function () {
return ["999-999", "9999-9999"];
}
});
mask.mask(document.getElementById("flex"));
Такой подход позволяет выбирать формат динамически.
Маска может изменять отображение в зависимости от состояния поля.
const mask = new Inputmask({
mask: "9999-9999",
showMaskOnHover: false,
showMaskOnFocus: true
});
mask.mask(document.getElementById("field"));
Эти настройки влияют на UX, обеспечивая визуальную подсказку только при взаимодействии.
Inputmask работает на уровне отдельных полей, но легко интегрируется с формами.
const form = document.querySelector("form");
form.addEventListener("submit", (e) => {
const phone = document.getElementById("phone").inputmask.unmaskedvalue();
console.log(phone);
});
Такой подход позволяет отделить визуальное форматирование от логики отправки данных.
Inputmask поддерживает переключение форматов в зависимости от условий.
const mask = new Inputmask({
mask: ["999-9999", "9999-999-999"]
});
mask.mask(document.getElementById("phone"));
Пользователь может вводить данные в разных форматах, а библиотека автоматически определяет соответствие.
Маска предотвращает ввод недопустимых символов на уровне интерфейса.
const mask = new Inputmask("9999");
mask.mask(document.getElementById("year"));
Любые символы, не соответствующие шаблону, блокируются при вводе.
Inputmask не конфликтует с нативными событиями при правильной интеграции.
const input = document.getElementById("custom");
input.addEventListener("input", (e) => {
console.log("Текущее значение:", e.target.value);
});
Библиотека изменяет значение поля, но не блокирует стандартные события DOM.
Использование Inputmask без фреймворков даёт прямой доступ к DOM и жизненному циклу элементов. Это позволяет:
Такой подход особенно эффективен в проектах с минимальной обвязкой или в гибридных системах, где DOM управляется вручную.