Regex - чередование букв и цифр - PullRequest
2 голосов
/ 10 октября 2019

Мне интересно, как создать регулярное выражение, которое бы всегда соответствовало "D1B2C4Q3", но не "DDA1Q3" или "D $ 1A2B".

То есть число должно всегда следовать за буквой и наоборот. Я работал над этим некоторое время, и мое текущее выражение ^([A-Z0-9])(?!)+$ явно не работает

Ответы [ 4 ]

3 голосов
/ 10 октября 2019
^([A-Z][0-9])+$

Объединяя буквы и цифры в один символьный класс, выражение совпадает в любом порядке. Вы должны разделить классы последовательно внутри группы.

1 голос
/ 10 октября 2019

Еще одна идея, которая будет соответствовать A, A1, 1A, A1A, ...

^\b\d?(?:[A-Z]\d)*[A-Z]?$

См. Эту демонстрацию на regex101

  • \b граница слова в ^ start требуется как минимум один символ ( удалить , если пустая строка допустима)
  • \d?, за которым следует необязательно цифра
  • (?:[A-Z]\d)*, за которой следует любая сумма из (?: верхняя альфа, за которой следует цифра )
  • [A-Z]?$, заканчивающаяся необязательной верхней альфа

Если вы хотите принять нижние альфы , используйте i флаг .

1 голос
/ 10 октября 2019

Я мог бы на самом деле использовать простой шаблон регулярных выражений с отрицательным предвкушением, чтобы избежать появления повторяющихся букв / цифр:

^(?!.*(?:[A-Z]{2,}|[0-9]{2,}))[A-Z0-9]+$

Демо

Причина, по которой я выбрал этот подход, а не обходной, заключается в том, что мы априори не знаем, будет ли ввод начинаться или заканчиваться цифрой или буквой. На самом деле существует четыре возможных комбинации начала / конца, и это может привести к грязному образцу.

0 голосов
/ 10 октября 2019

Полагаю, может быть,

^(?!.*\d{2}|.*[A-Z]{2})[A-Z0-9]+$

может работать нормально, а может и нет.

Демонстрация 1

Лучший подход будетбыть:

^(?:[A-Z]\d|\d[A-Z])+$

Демо 2

Или

^(?:[A-Z]\d|\d[A-Z])*$

Или

^(?:[A-Z]\d|\d[A-Z]){1,}$

, что будет зависеть, если выВы хотите, чтобы пустая строка была действительной или нет.

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