Поведение маски в Inputmask при работе с повторяющимися или необязательными сегментами определяется параметром greedy. Этот режим управляет тем, насколько «жадно» маска занимает доступное пространство ввода, а также как распределяются необязательные позиции внутри шаблона.
В основе механизма лежит баланс между фиксированной структурой маски и динамическим расширением шаблона в зависимости от введённых данных.
Параметр greedy влияет на то, как Inputmask
интерпретирует повторяющиеся элементы и необязательные символы:
greedy: true — маска стремится занять максимально
возможное количество позиций заранееgreedy: false — маска занимает минимально необходимое
пространство и расширяется по мере вводаПоведение особенно заметно при использовании:
9, a,
*)repeatПри включённом greedy-режиме Inputmask заранее «разворачивает» маску до максимальной длины. Это означает, что поле ввода визуально выглядит заполненным шаблоном даже до начала ввода.
Пример:
Inputmask({
mask: "999-999-9999",
greedy: true
}).mask("#phone");
В этом случае:
999-999-9999 отображается сразуGreedy-режим полезен, когда важна строгая форма представления данных, например:
При выключенном greedy Inputmask минимизирует начальную длину маски и расширяет её только при необходимости.
Inputmask({
mask: "999-999-9999",
greedy: false
}).mask("#phone");
Особенности:
Такой режим особенно заметен при масках с повторениями:
Inputmask({
mask: "9{1,10}",
greedy: false
}).mask("#code");
Здесь количество допустимых цифр расширяется динамически.
Наиболее выраженное различие greedy/нен greedy проявляется при использовании повторов.
mask: "9{3,6}"
mask: "9{+}"
или аналогичные конфигурации с бесконечным повтором.
Greedy влияет и на необязательные группы, особенно при сложных масках:
mask: "(999) 999-9999[9][9]"
В этом случае:
Разница заметна при заполнении телефонных форматов с расширением номера.
Placeholder в Inputmask тесно связан с greedy-режимом, поскольку именно он заполняет «пустые» позиции.
Inputmask({
mask: "999-999",
placeholder: "_",
greedy: true
}).mask("#field");
Поведение:
Это влияет на восприятие пользователем доступного пространства ввода.
При использовании альтернативных сегментов поведение становится более сложным:
mask: "999|aaa"
или через alias-конфигурации с несколькими вариантами формата.
В greedy-режиме:
В non-greedy:
В числовых масках greedy влияет на визуальное распределение разрядов:
Inputmask("decimal", {
digits: 2,
greedy: true
}).mask("#price");
Особенности:
При greedy: false структура формируется по мере ввода
числа, особенно заметно при увеличении целой части.
Greedy играет ключевую роль при автогенерации длины:
Inputmask({
mask: "9",
repeat: 10,
greedy: true
}).mask("#serial");
В этом случае:
На уровне движка Inputmask greedy влияет на:
При greedy: true структура становится статичной, что уменьшает количество перестроений DOM-логики. При greedy: false увеличивается количество динамических операций при каждом вводе символа.
Greedy не работает изолированно и часто комбинируется с:
autoUnmask — влияет на извлечение значения без
маскиclearIncomplete — определяет поведение при неполном
вводеshowMaskOnHover — визуализация пустых позицийskipOptionalPartCharacter — обработка необязательных
сегментовПример комплексной конфигурации:
Inputmask({
mask: "999-9999[9]",
greedy: false,
clearIncomplete: true,
showMaskOnHover: false
}).mask("#input");
Здесь greedy определяет базовую стратегию построения структуры, а остальные параметры регулируют поведение поверх неё.
При диагностике поведения масок greedy режим проявляется в следующих признаках:
Greedy: true обычно даёт стабильную, предсказуемую структуру, тогда как greedy: false приводит к более «живому» и адаптивному поведению маски.