Встроенная валидация в Inputmask формируется как совокупность правил, встроенных в систему маскирования, и проверок, которые выполняются на каждом этапе ввода значения. Основная идея заключается в том, что допустимость значения определяется не постфактум, а в процессе его формирования, что позволяет предотвращать некорректные состояния поля ещё до завершения ввода.
Ключевым принципом является синхронизация визуального представления и внутренней модели данных: маска определяет структуру, а валидатор проверяет соответствие каждого введённого символа допустимому набору правил.
Внутренняя валидация Inputmask опирается на несколько уровней проверки:
Каждый уровень действует независимо, но результаты объединяются в итоговое состояние валидности.
Маска определяет структуру ввода через шаблон, где каждый символ либо фиксирован, либо является плейсхолдером.
Пример логики:
9 — цифраa — буква* — алфавитно-цифровой символКаждая позиция имеет строгий набор допустимых значений. При вводе символа происходит проверка:
Если символ не проходит проверку, он отклоняется без изменения состояния маски.
Механизм definitions расширяет базовый набор правил.
Каждое определение представляет собой пользовательское правило проверки
символа.
Пример структуры:
Inputmask({
mask: "##-AA",
definitions: {
"#": {
validator: "[0-9]",
cardinality: 1
},
"A": {
validator: "[A-F]",
cardinality: 1
}
}
});
validator может быть строкой регулярного выражения или
функцией;cardinality определяет количество символов,
потребляемых правилом;Функциональные валидаторы позволяют внедрять сложную логику:
"A": {
validator: function (ch) {
return ch >= "A" && ch <= "Z";
}
}
Регулярные выражения используются как один из основных инструментов встроенной валидации. Они применяются:
При обработке символа происходит тестирование:
Важно, что регулярное выражение применяется не к финальной строке, а к локальному состоянию ввода.
Встроенная валидация включает механизм определения полноты ввода. Он активируется, когда:
Основные критерии завершённости:
Функция isComplete используется для определения этого
состояния и возвращает логическое значение.
Optional части маски задаются специальными конструкциями, например:
? — обозначение необязательного блока;Валидация таких сегментов работает по принципу:
Параметр skipOptionalPartCharacter влияет на поведение
пропуска символов при проверке.
Параметр greedy управляет распределением вводимых
символов по маске и влияет на проверку валидности.
greedy: true — маска пытается заполнить максимальное
количество позиций;greedy: false — допускается более гибкое распределение
ввода.В контексте валидации это приводит к различиям:
Система валидности тесно связана с событийной моделью.
Срабатывает при полном соответствии маске.
Условия:
Активируется при потере фокуса, если:
Срабатывает при полном очищении поля. С точки зрения валидации это состояние считается нейтральным, но фиксируется как отдельный сценарий.
Inputmask предоставляет программные методы проверки состояния.
Метод проверяет соответствие текущего значения маске:
Логика проверки включает нормализацию значения перед сравнением с маской.
Встроенная валидация поддерживает режим regex-масок:
Inputmask({
mask: /[0-9]{3}-[a-z]{2}/
});
В этом режиме:
Такая модель используется для гибких форматов, где структура менее жесткая.
Alias представляет собой предустановленный набор правил, включающий:
При использовании alias:
Alias фактически расширяет базовую систему валидации до специализированных сценариев.
При очистке значения происходит:
Важно, что после очистки система не хранит предыдущие валидные состояния, что исключает ложные срабатывания валидации.
Встроенная валидация Inputmask формируется как многоуровневая система, где:
Совокупность этих механизмов создаёт непрерывную валидацию, при которой любое состояние поля находится под контролем правил маски в реальном времени.