Регулярное выражение для проверки нескольких входов согласно приведенному ниже регулярному выражению - PullRequest
0 голосов
/ 27 января 2020

У меня есть регулярное выражение, которое проверяет мои входные данные, такие как

Регулярное выражение: ^(?=.{1,15}$)([a-zA-Z0-9]+)(?:[-]{1})[a-zA-Z0-9]+$

Пример 1: BBB-123BBB

Теперь я хочу создать регулярное выражение, используя приведенное выше, где мое регулярное выражение может проверять несколько входов с точкой с запятой (;) в качестве разделителя и максимальный ввод, который может быть там, составляет 20.

Как для примера 2: BBB-123BB,AAA-1234;EEE-9876....20 items

Пример 2. BB-123BB,AAA3-1234;EEE334-9876....20 items

Как я могу расширить свое регулярное выражение выше (первое) чтобы разрешить добавление нескольких входов, разделяя их точкой с запятой, и может содержать не более 20 элементов (как показано в примере 2)?

Ответы [ 2 ]

1 голос
/ 27 января 2020

Опираясь на ваш шаблон, я удалил ненужные группы захвата и использовал простой -, что эквивалентно (?:[-]{1}). Вот что я придумала:

^(?:(?:^|;)(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+){1,20}$

Объяснение:

^ - совпадение начала строки

(?:...) - группа без захвата

^|; - чередование: совпадение ; буквально или совпадение начала строки

[^;]{1,15}; - совпадение от 1 до 15 символов, отличных от ;

{1,20} - соответствует предыдущему шаблону от 1 до 20 раз

$ - соответствует концу строки

Демо

РЕДАКТИРОВАТЬ: Шаблон:

^(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+(?:;(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+){0,19}$

не примет ; в начале.

ВТОРОЕ РЕДАКТИРОВАНИЕ:

^(?=[^;]{1,15}(?:;|$))[a-zA-Z0-9]+-[a-zA-Z0-9]+(?:;(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+){0,19}$

Добавлено: (?:;|$) - соответствует буквально ; или $ - конец строки

Что он делает: правильно ограничивает длину токена до 15

1 голос
/ 27 января 2020

Если максимальное значение не имеет значения, просто разрешите произвольные повторы.

^(?=[^;]{3,15}(?:;[^;]{3,15})*$)[a-zA-Z0-9]+-[a-zA-Z0-9]+(;[a-zA-Z0-9]+-[a-zA-Z0-9]+)*$

Если вы хотите специально разрешить от 0 до 19 повторений, измените последний * на {0,19}.

Минимальная строка, которая может соответствовать основному выражению, состоит из трех символов; поэтому я обновил ограничение длины на {3,15}.

Минус просто соответствует самому себе, поэтому нет необходимости помещать его в класс символов; и никогда не бывает веской причины указывать одно повторение чего-либо, поэтому я соответственно упростил основное регулярное выражение.

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