В библиотеке Inputmask регулярные выражения используются как отдельный режим маскирования, позволяющий описывать допустимый ввод через синтаксис JavaScript RegExp вместо классической символьной маски. Такой подход применяется в случаях, когда структура данных не укладывается в фиксированную позиционную модель, либо когда требуется высокая гибкость валидации.
Регулярная маска в Inputmask фактически заменяет посимвольное сопоставление шаблона на проверку всего значения или его части через регулярное выражение. Это меняет поведение ввода: вместо пошагового заполнения фиксированных слотов применяется проверка соответствия строки заданному правилу.
regex в
InputmaskВ Inputmask поддерживается отдельный alias regex,
который предназначен для работы с регулярными выражениями.
Базовая форма подключения:
import Inputmask from "inputmask";
Inputmask({
regex: "[0-9]*"
}).mask(document.querySelector("input"));
В данном режиме маска интерпретирует входные данные через регулярное
выражение, заданное в параметре regex.
regex_ или
9;mask и
regexInputmask предоставляет два принципиально разных подхода:
Inputmask("99-99-9999").mask(input);
Inputmask({
regex: "\\d{2}-\\d{2}-\\d{4}"
}).mask(input);
pattern в HTML5.Регулярное выражение передаётся в виде строки, а не объекта RegExp:
Inputmask({
regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
}).mask(input);
Так как выражение передаётся строкой, обратный слэш требует двойного экранирования:
\d → "\\d"\. → "\\."Регулярный режим работает по принципу постепенной проверки:
Пример:
Inputmask({
regex: "[0-9]{0,3}"
}).mask(input);
Здесь допустим ввод до трёх цифр, но каждый промежуточный шаг также проверяется.
Регулярные маски часто применяются для числовых ограничений.
Inputmask({
regex: "\\d{1,6}"
}).mask(input);
Inputmask({
regex: "\\d+(\\.\\d{0,2})?"
}).mask(input);
Поддерживается ввод:
1010.510.55но отклоняются значения с более чем двумя знаками после точки.
Email-валидация через regex часто применяется в Inputmask как альтернатива HTML pattern:
Inputmask({
regex: "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}"
}).mask(input);
Особенность такого подхода заключается в том, что ввод ограничивается уже на уровне набора символов, а не только при потере фокуса.
IPv4 можно описать регулярным выражением:
Inputmask({
regex: "(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}"
}).mask(input);
Такой шаблон учитывает диапазон каждого октета:
999.Несмотря на гибкость, регулярные маски имеют ряд ограничений.
Невозможно задать поведение вида:
Регулярное выражение работает глобально.
Некоторые сложные выражения:
{n,m}|могут вести себя нестабильно при пошаговом вводе, так как regex не всегда однозначно интерпретируется в режиме инкрементальной проверки.
pattern
HTMLРегулярный режим Inputmask часто сравнивается с HTML атрибутом
pattern, однако поведение отличается.
Некоторые конфигурации допускают передачу RegExp напрямую через настройку mask:
Inputmask({
mask: new RegExp("\\d+")
}).mask(input);
Однако такой подход используется реже, так как основным механизмом
остаётся параметр regex.
Inputmask поддерживает алиасы, которые можно комбинировать с регулярными выражениями.
Пример числового алиаса с ограничением:
Inputmask("numeric", {
rightAlign: false,
regex: "\\d+(\\.\\d{0,2})?"
}).mask(input);
В таких случаях regex выступает дополнительным ограничителем поверх базового поведения алиаса.
Регулярный режим пересчитывает соответствие строки при каждом изменении:
При использовании больших regex-выражений следует учитывать:
| увеличивают количество путей
проверки;{1,100} могут замедлять
ввод.Оптимизация достигается через упрощение выражений и сокращение бэктрекинга.
Inputmask({
regex: "[A-Z]{3}-\\d{4}"
}).mask(input);
Inputmask({
regex: "(?=.*[A-Z])(?=.*\\d)[A-Za-z\\d]{8,}"
}).mask(input);
Inputmask({
regex: "([01]\\d|2[0-3]):[0-5]\\d"
}).mask(input);
Ключевая особенность Inputmask в regex-режиме — проверка не только полного совпадения, но и допустимости промежуточного состояния.
Это означает:
1 допустима для \\d{2};12 также допустима;123 отклоняется.Такой механизм требует от регулярного выражения способности поддерживать prefix matching, иначе ввод может блокироваться преждевременно.
greedyХотя greedy чаще относится к символьным маскам, в
regex-режиме его влияние косвенно проявляется через квантификаторы:
{1,} — потенциально жадное поведение;{0,} — допускает пустое значение.Контроль жадности влияет на то, насколько рано Inputmask принимает ввод как потенциально валидный.
Регулярные маски часто комбинируются с внешней логикой:
Inputmask({
regex: "\\d{6}",
onBeforePaste: function (value) {
return value.trim();
}
}).mask(input);
В этом случае regex отвечает за структуру, а обработчики — за предобработку данных.
При вставке:
Это особенно важно для длинных строк вроде UUID или серийных кодов.
Inputmask поддерживает базовую работу с Unicode, однако regex-режим зависит от возможностей JavaScript RegExp:
\w не всегда покрывает все Unicode-символы;[А-Яа-я];u flag), который не всегда учитывается в Inputmask.