В основе работы Inputmask лежит преобразование произвольного пользовательского ввода в структурированное значение, соответствующее маске. Некорректный ввод возникает на любом этапе взаимодействия с полем: при вводе символа с клавиатуры, вставке из буфера обмена, программной установке значения или автозаполнении браузера.
Ключевая особенность архитектуры заключается в том, что входные данные никогда не считаются «готовыми» до прохождения цепочки нормализации, фильтрации и постобработки. Любой символ сначала попадает в промежуточное состояние, где применяются правила маски, определения символов и валидаторы.
Некорректный ввод в контексте Inputmask не является единым понятием и разделяется на несколько категорий:
Символы, не соответствующие определению маски. Например, буквы в числовом поле или лишние знаки в шаблоне даты.
Ситуации, когда символ допустим по типу, но вставлен в позицию, не предусмотренную структурой маски (например, месяц > 12 в дате).
Состояние, при котором часть маски заполнена корректно, но итоговое значение не завершено.
Ввод, формально соответствующий маске, но нарушающий бизнес-правила (например, дата 31 февраля).
Первичный уровень обработки реализуется через систему
definitions. Каждый символ маски сопоставляется с набором
допустимых символов или регулярным выражением.
Inputmask({
mask: "99-99-9999",
definitions: {
"9": {
validator: "[0-9]",
definitionSymbol: "*"
}
}
}).mask(input);
На этом уровне происходит отсечение символов, не удовлетворяющих валидатору. Такой подход предотвращает проникновение большинства некорректных значений уже на этапе ввода.
При попытке ввода символа, не соответствующего текущей позиции маски, Inputmask:
Контроль поведения осуществляется параметрами конфигурации и внутренним состоянием маски.
Ключевым аспектом является отсутствие «ошибки» как состояния — некорректный символ просто не попадает в итоговую строку.
Вставка данных является наиболее частым источником некорректных значений, так как обходится поэтапный ввод.
Для обработки используется цепочка:
Inputmask({
mask: "+7 (999) 999-99-99",
clearIncomplete: true
}).mask(input);
Если вставляемая строка содержит лишние символы (например, буквы,
пробелы, дополнительные знаки), они удаляются до применения маски. При
включённой опции clearIncomplete незавершённые значения
полностью очищаются.
Механизм onBeforeMask используется для нормализации
входных данных до применения маски. Это ключевой этап устранения
некорректных значений, поступающих из внешних источников (API, база
данных, автозаполнение).
Inputmask({
mask: "+7 (999) 999-99-99",
onBeforeMask: function (value) {
return value.replace(/\D/g, "");
}
}).mask(input);
На этом этапе устраняются:
Фактически формируется «чистая» строка, пригодная для дальнейшего наложения маски.
Проверка валидности выполняется отдельно от процесса ввода.
Определяет, соответствует ли значение маске и правилам:
Проверяет только полноту заполнения маски без оценки бизнес-логики.
Разделение этих понятий позволяет различать:
Для обработки сложных случаев некорректного ввода применяется
postValidation. Этот механизм позволяет наложить
дополнительные правила после применения маски.
Inputmask({
mask: "99/99/9999",
postValidation: function (buffer, pos, c, currentResult) {
const day = parseInt(buffer.slice(0, 2), 10);
const month = parseInt(buffer.slice(3, 5), 10);
if (month > 12) return false;
if (day > 31) return false;
return true;
}
}).mask(input);
На этом уровне обрабатываются логические ошибки, которые невозможно отфильтровать стандартными средствами маскирования.
Некорректный ввод часто связан с пропуском необязательных частей
маски. Параметр skipOptionalPartCharacter определяет
символ, который используется для обозначения пропущенных сегментов.
При неправильной конфигурации возможно накопление «мусорных» значений, которые формально соответствуют маске, но искажают итоговый результат.
Параметр clearIncomplete играет ключевую роль в
стратегии обработки некорректного ввода.
true — незавершённые значения удаляютсяfalse — сохраняются в полеПри включённом режиме система рассматривает частичный ввод как ошибочный и удаляет его при потере фокуса.
Некорректный ввод может поступать не только от пользователя, но и через API:
input.value = "ABC123!!!";
Inputmask("999-999").mask(input);
В этом случае Inputmask выполняет принудительную нормализацию:
При невозможности приведения к валидному виду значение обнуляется или частично заполняется.
Система definitions позволяет полностью переопределять
правила допустимости символов.
Inputmask({
mask: "aa-999",
definitions: {
"a": {
validator: "[A-Za-z]",
casing: "upper"
}
}
}).mask(input);
Здесь некорректный ввод автоматически корректируется:
Таким образом формируется активная фильтрация, а не пассивная валидация.
Механизм onBeforeWrite используется для вмешательства в
процесс записи символа в маску.
Inputmask({
mask: "999-999",
onBeforeWrite: function (event, buffer, caretPos, opts) {
return {
refreshFromBuffer: true,
buffer: buffer
};
}
}).mask(input);
Этот уровень обработки позволяет:
Некорректный ввод часто связан с нарушением логики перемещения курсора. Inputmask управляет этим через внутреннюю модель позиции:
При этом пользовательский ввод не блокируется, а перераспределяется в рамках маски.
Система допускает промежуточно некорректные состояния, которые считаются временными. Например:
Такие состояния не трактуются как ошибка до момента потери фокуса или вызова проверки полноты.
Это снижает жёсткость валидации и позволяет обрабатывать ввод как поток, а не как конечное значение.
Внутренняя цепочка обработки выстраивается по уровням приоритета:
Каждый уровень способен отклонить или скорректировать значение, не передавая его дальше.
В зависимости от конфигурации система может применять разные стратегии:
Некорректные символы не попадают в значение.
Символы приводятся к допустимому виду (регистр, формат, позиция).
Полное удаление некорректного или неполного значения.
Сохранение валидной части ввода с отбрасыванием остального.
При вставке больших фрагментов данных Inputmask выполняет пакетную обработку:
При высоком количестве ошибок система не прерывает процесс, а приводит данные к максимально возможному валидному состоянию.
Некорректный ввод также возникает при конфликте:
В таких случаях приоритет отдаётся последнему применённому правилу, а конфликтующие символы отбрасываются или заменяются дефолтным заполнителем.
Система Inputmask реализует не бинарную модель «валидно / невалидно», а многоуровневую фильтрацию с постепенным уточнением состояния. Некорректный ввод не фиксируется как ошибка в момент возникновения, а последовательно трансформируется через цепочку обработчиков до достижения допустимого состояния или полного исключения из результата.