В Inputmask существует набор предопределённых масочных символов, которые используются для построения шаблонов ввода. Они определяют, какие символы допустимы в конкретной позиции поля ввода и как пользовательское значение должно проверяться и форматироваться.
Наиболее часто используемые стандартные токены:
Эти символы являются частью внутреннего словаря
definitions, который используется движком маски при
обработке каждого введённого символа.
В основе системы масок лежит объект definitions, который представляет собой карту правил сопоставления символов маски и допустимых вводимых значений.
Каждый символ в маске соответствует записи вида:
validator — функция проверки символаcardinality — количество занимаемых позицийprevalidator — предварительные проверки
(опционально)casing — преобразование регистра (опционально)Структура definitions упрощённо:
{
"9": {
validator: "[0-9]",
cardinality: 1
},
"a": {
validator: "[A-Za-z]",
cardinality: 1
},
"*": {
validator: "[A-Za-z0-9]",
cardinality: 1
}
}
При обработке ввода Inputmask проходит по маске слева направо, сопоставляя каждый символ с соответствующим правилом из definitions.
Механизм расширения позволяет изменить поведение стандартных символов без изменения исходного кода библиотеки.
Используется метод:
Inputmask.extendDefinitions({
"9": {
validator: "[0-9-]",
cardinality: 1
}
});
В данном случае стандартный символ 9 перестаёт
ограничиваться только цифрами и начинает принимать также дефис.
Более безопасный способ изменения поведения стандартных символов — переопределение на уровне конкретной маски.
Inputmask({
mask: "999-999",
definitions: {
"9": {
validator: "[0-9-]",
cardinality: 1
}
}
}).mask(input);
В этом случае изменения действуют только в пределах одной маски и не влияют на остальные.
При обработке ввода учитывается несколько уровней приоритета:
extendDefinitions)Если символ определён на нескольких уровнях, используется версия с более высоким приоритетом.
Стандартные токены можно полностью заменить, изменив их семантику.
aInputmask.extendDefinitions({
"a": {
validator: "[А-Яа-яЁё]",
cardinality: 1
}
});
Теперь символ a принимает кириллицу вместо латиницы.
*
на строгое правилоInputmask.extendDefinitions({
"*": {
validator: "[A-F0-9]",
cardinality: 1
}
});
Такой подход часто используется для реализации масок под шестнадцатеричные значения.
Помимо переопределения существующих, definitions позволяет вводить новые токены.
Inputmask.extendDefinitions({
"#": {
validator: "[1-5]",
cardinality: 1
}
});
Теперь символ # может использоваться в маске:
Inputmask("##-##").mask(input);
Validator не ограничивается регулярными выражениями. Допускается использование функции:
Inputmask.extendDefinitions({
"9": {
validator: function (ch) {
return ch >= "0" && ch <= "9";
},
cardinality: 1
}
});
Такой подход применяется при сложной логике проверки, когда регулярных выражений недостаточно.
Параметр casing позволяет автоматически преобразовывать
ввод:
Inputmask.extendDefinitions({
"a": {
validator: "[A-Za-z]",
cardinality: 1,
casing: "upper"
}
});
Возможные значения:
upper — преобразование в верхний регистрlower — преобразование в нижний регистрprevalidator позволяет выполнять предварительную
проверку частичного ввода, что важно для динамического ввода данных.
Inputmask.extendDefinitions({
"9": {
validator: "[0-9]",
cardinality: 1,
prevalidator: [
{
validator: "[0-9]",
cardinality: 1
}
]
}
});
Prevalidator используется для промежуточных состояний ввода, когда значение ещё не полностью соответствует финальному формату.
Inputmask.extendDefinitions({
"9": {
validator: "[0-9\\s\\-]",
cardinality: 1
}
});
Позволяет вводить пробелы и дефисы в числовых полях.
Inputmask.extendDefinitions({
"S": {
validator: "[A-Z0-9]",
cardinality: 1,
casing: "upper"
}
});
Использование:
Inputmask("SSSS-SSSS").mask(input);
Inputmask.extendDefinitions({
"h": {
validator: "[0-9A-Fa-f]",
cardinality: 1,
casing: "upper"
}
});
Переопределение стандартных символов может приводить к конфликтам:
9, начинают
принимать расширенный набор символовДля минимизации конфликтов предпочтительнее локальное определение
definitions в конфигурации конкретной маски.
При переопределении символов важно учитывать, что Inputmask оперирует не только конечным значением, но и промежуточными состояниями строки.
Если validator слишком строгий, возможны эффекты:
Переопределённые символы взаимодействуют с:
greedy режимомclearIncompleteautoUnmaskskipOptionalPartCharacterИзменение definitions может косвенно влиять на поведение этих параметров, поскольку изменяется базовая логика валидации символов.
Использование переопределения требует контроля области действия:
9, a, *
на глобальном уровне без необходимостиТакой подход снижает вероятность непредсказуемого поведения при масштабировании интерфейса ввода.