В Inputmask программная валидация строится вокруг идеи синхронизации
введённого значения с маской в реальном времени и возможности
принудительной проверки строки независимо от DOM-событий. Маска
выступает не только как средство форматирования, но и как
детерминированный валидатор, основанный на конфигурации
mask, definitions, regex и
дополнительных параметрах поведения ввода.
Валидация может происходить в нескольких режимах:
Каждый режим опирается на единый механизм разбора маски и сопоставления входной строки с шаблоном.
isValidОсновной программный механизм валидации — метод isValid,
доступный через экземпляр Inputmask.
const im = new Inputmask("9999-9999");
im.isValid("1234-5678");
Метод возвращает булево значение, определяющее соответствие строки маске.
Внутренне проверка выполняет:
definitionsgreedy, repeat, optional
правилОсобенность метода заключается в том, что он не изменяет DOM и работает как чистая функция проверки состояния.
Inputmask.prototypeВ более низкоуровневом режиме используется статическая логика экземпляра маски, где проверка может быть выполнена без привязки к элементу:
Inputmask("AA-9999").isValid("AB-1234");
Такой вариант применяется при серверной валидации или при обработке данных, поступающих из внешних источников.
Inputmask автоматически выполняет частичную валидацию при каждом изменении значения input. Это не финальная проверка, а инкрементальная оценка допустимости символа в текущей позиции.
Механизм включает:
definition~ в числовых масках)Таким образом, поле всегда находится в состоянии «валидного частичного префикса».
Для пересчёта состояния маски используется метод
setValue, который инициирует повторную валидацию:
const im = new Inputmask("999-999");
const input = document.querySelector("input");
im.mask(input);
im.setValue("1234567");
При установке значения:
Метод getValue возвращает текущее значение с учётом
маски, но не всегда отражает валидность в строгом смысле.
const value = im.getValue();
const valid = im.isValid(value);
Разделение логики:
getValue — текущее отображаемое значениеisValid — строгая проверка соответствия шаблонуТакое разделение позволяет работать с промежуточными состояниями ввода.
Inputmask различает:
Частично заполненное состояние определяется через внутренний флаг
isComplete.
input.addEventListener("blur", function () {
const im = input.inputmask;
console.log(im.isComplete());
});
Если маска не заполнена полностью, но не нарушена структура, значение считается «incomplete», а не «invalid».
onBeforeValidate и oncompleteРасширенная программная валидация может быть реализована через события жизненного цикла маски.
Inputmask({
mask: "9999-9999",
oncomplete: function () {
console.log("complete");
},
onincomplete: function () {
console.log("incomplete");
},
onBeforeWrite: function (event, buffer, caretPos, opts) {
return {
refreshFromBuffer: true
};
}
}).mask(input);
Ключевые точки контроля:
oncomplete — срабатывает при полном соответствии
маскеonincomplete — при потере соответствия после вводаonBeforeWrite — возможность вмешательства в процесс
записиInputmask позволяет выполнять валидацию как чистую функцию преобразования строки.
const mask = new Inputmask({
mask: "(999) 999-9999"
});
const result = mask.isValid("(123) 456-7890");
Такой режим используется:
definitionsСистема definitions позволяет расширять правила
допустимых символов, что напрямую влияет на программную валидацию.
Inputmask.extendDefinitions({
"h": {
validator: "[A-Fa-f0-9]",
casing: "upper"
}
});
Маска:
const im = new Inputmask("hh-hh-hh");
Проверка:
im.isValid("AF-1B-3C");
Кастомные правила валидации становятся частью основного движка проверки.
Inputmask поддерживает режим regex, где вся валидация
делегируется регулярному выражению.
const im = new Inputmask({
regex: "[0-9]{4}-[A-Z]{3}"
});
Проверка:
im.isValid("1234-ABC");
В этом режиме:
Сброс маски приводит к очищению состояния и повторной инициализации буфера:
const im = new Inputmask("999-999");
im.setValue("");
При этом:
Вставка (paste) обрабатывается как отдельный поток данных. При программной проверке учитывается:
Пример поведения:
input.value = "123ABC456";
input.dispatchEvent(new Event("input"));
Inputmask преобразует строку в допустимый формат или блокирует вставку частично.
metadata состояния маскиКаждый экземпляр Inputmask содержит внутренние метаданные:
Доступ к ним позволяет строить расширенную логику проверки:
const im = input.inputmask;
console.log(im.maskset);
console.log(im.opts);
Хотя прямое использование этих структур не является публичным API, они часто применяются для глубокой диагностики состояния валидации.
Сложные сценарии используют комбинацию методов:
const im = new Inputmask("9999-AAAA");
im.mask(input);
function validate() {
const value = im.getValue();
const isValid = im.isValid(value);
const isComplete = im.isComplete();
return isValid && isComplete;
}
Такой подход позволяет различать:
Система Inputmask использует иерархию правил:
definitions (символьные ограничения)mask pattern (структура)regex (если задан)onBeforeWrite,
onBeforePaste)isValidЭта цепочка обеспечивает предсказуемость результата вне зависимости от источника данных.
Хотя Inputmask является синхронной библиотекой, его результаты часто используются в асинхронных процессах:
async function submit() {
const value = im.getValue();
if (!im.isValid(value)) {
return;
}
await sendToServer(value);
}
Программная валидация в этом случае выступает как первый уровень защиты данных перед внешними системами.