Как отформатировать допущение множественных пробелов между символами в Regex более компактно? - PullRequest
0 голосов
/ 04 мая 2020

Я придумал этот regEx, чтобы проверить, правильно ли введен IBAN в поле, которое также позволяет пользователю вводить до 4 пробелов между символами, не вызывая ошибки.

^\s?\s?\s?\s?N\s?\s?\s?\s?\s?O\s?\s?\s?\s?([0-9a-zA-Z]\s?\s?\s?\s?){13}$

Работает отлично, но я хочу избавиться от "\ s? \ s? \ s? \ s?" и отформатировать его более компактно, я пробовал [\s?]{4}, но это не работает.

Какой правильный способ сократить это?

Система, с которой я работаю, не позволяет чтобы я мог использовать любые Javascript, я могу использовать только чистые определения regEx для контроля ввода в поле.

спасибо

1 Ответ

2 голосов
/ 04 мая 2020

Вы можете укоротить повторяющиеся \s части, используя квантификатор {0,4}, чтобы 0-4 раза совпадать с пробелом, и добавить якорь $, чтобы утверждать конец строки, чтобы предотвратить частичное совпадение.

Если впоследствии вам не понадобится это значение группы захвата, вы можете сделать так, чтобы оно не захватывало (?:.

^\s{0,4}N\s{0,4}O\s{0,4}(?:[0-9a-zA-Z]\s{0,4}){13}$

Regex demo

Если вы не хотите совпадать с новой строкой, вы можете использовать [^\S\r\n]{0,4} вместо \s{0,4}, но это лишит цель сделать шаблон меньшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...