Квантификаторы в библиотеке Inputmask позволяют задавать количество повторений символов, групп или пользовательских определений внутри маски. Они делают шаблоны гибкими и избавляют от необходимости вручную перечислять одинаковые элементы.
Без квантификаторов маски быстро становятся громоздкими:
Inputmask("9999999999").mask("#phone");
С квантификаторами тот же результат записывается значительно компактнее:
Inputmask("9{10}").mask("#phone");
Квантификаторы особенно полезны при работе с:
В Inputmask используются фигурные скобки:
{n}
{n,m}
{n|}
Где:
n — минимальное количество повторений;m — максимальное количество повторений;| — специальная форма для динамического ввода.9{4}
Означает:
ровно 4 цифры
Inputmask("9{4}").mask("#code");
Допустимые значения:
1234
5678
0001
Недопустимые:
123
12345
Квантификаторы работают не только с цифрами, но и с любыми определителями маски.
Inputmask("a{5}").mask("#letters");
Требуется ровно 5 букв.
Допустимо:
hello
world
Недопустимо:
abc
abcdef
Inputmask("*{8}").mask("#token");
Здесь:
* — любой буквенно-цифровой символ;{8} — повторение 8 раз.Подходит для:
{min,max}
Inputmask("9{2,5}").mask("#number");
Разрешает:
12
123
1234
12345
Не разрешает:
1
123456
При использовании диапазона Inputmask позволяет постепенно расширять ввод.
Например:
Inputmask("9{2,5}").mask("#input");
Пользователь может остановиться на:
12
или продолжить до:
12345
Квантификаторы можно комбинировать с необязательными секциями.
Inputmask("(9){1,3}").mask("#test");
Возможны варианты:
1
12
123
Квантификаторы могут применяться к целым группам.
Inputmask("(99-){3}99").mask("#serial");
Результат:
12-34-56-78
Здесь группа:
99-
повторяется три раза.
Inputmask("(99|AAA){2}").mask("#mixed");
Каждое повторение может принимать один из вариантов:
Возможные значения:
12ABC
ABC34
1212
ABCABC
{n|}
Это особый режим динамического повторения.
Inputmask("9{1|1,10}").mask("#dynamic");
Такой шаблон позволяет постепенно расширять маску без жесткой фиксации полной длины.
{1,10} от
{1|1,10}9{1,10}
Inputmask сразу строит маску на весь диапазон.
9{1|1,10}
Маска расширяется по мере ввода.
Это особенно важно для:
Inputmask({
mask: "9{1|1,15}",
greedy: false
}).mask("#amount");
Особенности:
greedyКвантификаторы тесно связаны с параметром greedy.
greedy: trueInputmask({
mask: "9{1,10}",
greedy: true
}).mask("#input");
Полная маска отображается сразу.
greedy: falseInputmask({
mask: "9{1,10}",
greedy: false
}).mask("#input");
Маска раскрывается постепенно.
greedy на UX__________
Пользователь видит все позиции сразу.
Подходит для:
Показываются только реально введённые символы.
Подходит для:
Inputmask({
definitions: {
"H": {
validator: "[A-F0-9]"
}
},
mask: "H{8}"
}).mask("#hex");
Разрешены HEX-символы:
A1B2C3D4
Без квантификаторов:
"HH:HH:HH:HH:HH:HH"
С группировкой:
"(HH:){5}HH"
Полный пример:
Inputmask({
definitions: {
"H": {
validator: "[A-Fa-f0-9]"
}
},
mask: "(HH:){5}HH"
}).mask("#mac");
Inputmask("+7 (999) 9{2,7}").mask("#phone");
Позволяет задавать переменную длину локального номера.
Inputmask("+7 (999) 999[-99][-99]").mask("#phone");
Однако аналогичная логика может быть записана через квантификаторы компактнее.
Inputmask("(99/){2}9999").mask("#date");
Результат:
12/05/2025
При использовании regex квантификаторы работают уже по
правилам регулярных выражений.
Inputmask({
regex: "\\d{4}-\\d{4}"
}).mask("#code");
Здесь:
{4}
обрабатывается самим регулярным выражением, а не механизмом стандартной маски Inputmask.
mask: "9{4}"
Квантификатор относится к токену Inputmask.
regex: "\\d{4}"
Квантификатор относится к синтаксису RegExp.
Это два разных механизма.
Inputmask("((99)-){2}AAA").mask("#complex");
Результат:
12-34-ABC
Слишком сложные вложенные конструкции:
((9{1,3}|AA){2,5}[-]){1,4}
могут:
Для сложных сценариев лучше использовать:
Большие диапазоны:
9{1,1000}
могут создавать проблемы:
Особенно в сочетании с:
Лучше:
9{1,20}
чем:
9{1,999}
Рекомендуется задавать реальные ограничения предметной области.
Inputmask({
mask: "9{4,8}",
clearIncomplete: true
}).mask("#input");
Если введено меньше минимального количества символов, значение очищается.
nullableInputmask({
mask: "9{2,5}",
nullable: true
}).mask("#input");
Пустое значение остаётся null, а не строкой маски.
Квантификаторы влияют на:
Особенно это заметно при:
greedy: false
и динамическом расширении маски.
9{1,9999}
Плохо для производительности.
((9|a){1,5}-){1,10}
Трудно поддерживать и отлаживать.
Неправильно:
mask: "\\d{4}"
Правильно:
mask: "9{4}"
9999999999
Минусы:
9{10}
Преимущества:
Inputmask("9{6}").mask("#sms");
Inputmask("(AAA-){3}9999").mask("#serial");
Inputmask("9{1,3}.9{1,3}.9{1,3}.9{1,3}").mask("#ip");
Inputmask("A{2}9{4,8}").mask("#doc");
Inputmask({
alias: "numeric",
mask: "9{1,12}"
}).mask("#amount");
Для диагностики удобно:
greedy;Лучше:
(99-){3}99
чем:
99-99-99-99
Лучше:
{1,10}
чем:
{1,1000}
Слишком большое количество:
в одной маске ухудшает UX.
Inputmask преобразует квантификаторы во внутренние повторяющиеся токены. При вводе библиотека:
Именно поэтому сложные комбинации квантификаторов могут заметно влиять на производительность интерфейса.