Внутри системы масок Inputmask регулярные выражения используются как
один из базовых способов описания допустимого ввода. Вместо пошагового
описания позиции символов через предопределённые токены (9,
a, *) может задаваться полноценное выражение
проверки строки, которое определяет допустимые последовательности
символов.
При этом регулярное выражение в Inputmask не всегда используется как классическая валидация строки целиком — оно интегрируется в поэтапный процесс ввода, где каждый символ проверяется в контексте текущего состояния маски.
Ключевая особенность: регулярное выражение становится частью масочного движка, а не просто функцией проверки.
В Inputmask регулярное выражение задаётся через параметр
mask, если используется режим regex:
Inputmask({
mask: /regex/
}).mask(element);
или в строковом виде:
Inputmask({
mask: "[0-9]{3}-[0-9]{2}"
}).mask(element);
Однако именно форма /.../ активирует режим интерпретации
как регулярного выражения, а не как классической маски.
Регулярные выражения, используемые внутри Inputmask, сохраняют стандартный синтаксис JavaScript, но с важным ограничением: не все конструкции работают одинаково эффективно в пошаговой маске.
Любой символ вне специальных операторов воспринимается буквально:
/abc/
означает строгую последовательность a → b → c.
Метасимволы задают классы допустимых символов:
| Символ | Значение |
|---|---|
. |
любой символ |
\d |
цифра |
\w |
буква, цифра или _ |
\s |
пробельный символ |
Пример:
/\d\d\d/
означает ввод трёх цифр подряд.
Regular Expressions поддерживают классы символов:
[abc]
означает один символ: a, b или
c.
Диапазоны:
[0-9]
[a-z]
[A-Z]
Комбинации:
[0-9a-fA-F]
В контексте Inputmask такие классы активно используются для ограничения ввода по позиции.
Квантификаторы задают количество повторений символа или группы.
| Конструкция | Значение |
|---|---|
{n} |
ровно n повторений |
{n,m} |
от n до m повторений |
* |
0 или больше |
+ |
1 или больше |
? |
0 или 1 |
Пример:
/\d{4}/
означает четыре цифры подряд.
В классическом regex * и + могут приводить
к неоднозначности. В Inputmask они интерпретируются более строго,
поскольку ввод происходит по символам:
+ требует минимум одного символа сразу* часто приводит к динамическому расширению маскиВ практических масках предпочтение отдаётся фиксированным
квантификаторам {n}.
Скобки используются для группировки:
/(abc)+/
означает повторение группы abc.
В Inputmask группировка важна для определения логических блоков ввода.
( ){ }, +, *,
?|Оператор | задаёт выбор между вариантами:
/cat|dog/
означает либо cat, либо dog.
В Inputmask это используется ограниченно, так как пошаговый ввод усложняет неоднозначные ветвления.
Специальные символы требуют экранирования:
| Символ | Экранирование |
|---|---|
. |
\. |
( |
\( |
) |
\) |
[ |
\[ |
] |
\] |
+ |
\+ |
* |
\* |
Пример:
/\(\d{3}\)/
соответствует телефонному коду в скобках.
Якоря задают позиционную привязку:
| Символ | Значение |
|---|---|
^ |
начало строки |
$ |
конец строки |
Пример:
/^\d{5}$/
означает строго пять цифр без лишних символов.
В Inputmask якоря часто избыточны, так как длина маски уже задаёт ограничение.
Регулярные выражения по умолчанию жадные:
/\d+/
захватывает максимально возможное количество цифр.
В Inputmask это может конфликтовать с поэтапным вводом, поэтому предпочтение отдается ограниченным выражениям:
/\d{1,3}/
Регулярное выражение в Inputmask не всегда выполняется как единый матчинг-алгоритм. Оно разбивается на шаги:
Это накладывает ограничения:
Конструкции вида:
(?=...)
(?!...)
(?<=...)
(?<!...)
либо игнорируются, либо работают нестабильно.
Сложные выражения с несколькими альтернативами могут приводить к неоднозначности при вводе:
/(a|ab|abc)/
На ранних стадиях ввода невозможно однозначно определить ветку.
Внутренний механизм Inputmask оптимизирован под:
Регулярные выражения могут комбинироваться с символами маски:
| Токен | Значение |
|---|---|
9 |
цифра |
a |
буква |
* |
буква или цифра |
Пример гибридной маски:
Inputmask({
mask: "999-\\d{2}"
})
Здесь первая часть обрабатывается как маска, вторая как regex-фрагмент.
Точка (.) в regex:
/a.c/
означает любой символ между a и c.
В Inputmask использование . может приводить к слишком
широкому допуску ввода, поэтому чаще заменяется на классы:
/a[0-9a-z]c/
Ключевое отличие Inputmask от стандартного regex-движка заключается в поддержке частичных совпадений.
Пример:
/\d{4}/
Поддерживаемые состояния:
"" — допустимо (ввод не начат)"1" — допустимо"12" — допустимо"1234" — завершённое совпадение"12345" — недопустимо или обрезаетсяСложность выражения напрямую влияет на отзывчивость поля ввода.
{n}[0-9]|Оптимальная форма регулярного выражения для маски:
/^[0-9]{3}[A-Z]{2}\d{4}$/
Характерные признаки:
При вводе:
Хотя классические флаги g, i,
m, y, u доступны в JavaScript
regex, в Inputmask они применяются ограниченно:
i влияет на буквенные классыg не имеет смысла в поэтапной проверкеy может использоваться для строгого сопоставления
позиции