Нужна помощь с регулярным выражением, чтобы соответствовать группе крови - PullRequest
3 голосов
/ 17 июня 2009

Я пытаюсь найти регулярное выражение, которое помогает мне проверить поле Группа крови - которое должно принимать только A [+ -], B [+ -], AB [+ -] и O [+ -].

Вот регулярное выражение, которое я придумал (и протестировал с помощью Regex Tester ):

[A|B|AB|O][\+|\-]

Теперь этот шаблон успешно соответствует A, B, O [+ -], но не соответствует AB [+ -].

Может кто-нибудь, пожалуйста, предложить регулярное выражение, которое будет служить моей цели?

Спасибо, м ^ е

Ответы [ 5 ]

16 голосов
/ 17 июня 2009

Попробуйте:

(A|B|AB|O)[+-]

Использование квадратных скобок определяет класс символов , который может быть только одним символом. Скобки создают группировку , которая позволяет ей делать то, что вы хотите. Вам также не нужно экранировать +- в классе символов, так как они не имеют своего регулярного значения внутри него.

Как вы упомянули в комментариях, если это строка, с которой вы хотите сопоставить, имеет точные значения, которые вы ищете, вы можете сделать это:

^(A|B|AB|O)[+-]$

Без начала строки и конца якоря строки такие вещи, как "helloAB + asdads", будут совпадать.

2 голосов
/ 17 июня 2009

Когда вы строите чередование (например, (A|B|AB|O)), вы должны быть осторожны с упорядочением элементов. Многие движки регулярных выражений будут останавливаться на первом подходящем заместителе (а не на самом длинном). Если бы не [-+] форсирование возврата, (A|B|AB|O)[-+] не сработало бы для "AB+". Вероятно, лучше сказать (AB|A|B|O)[-+] (но вы должны проверить документы для вашего движка регулярных выражений).

Кроме того, если вы не намерены захватывать антиген для последующего использования, вам следует использовать скобки без захвата для группировки: (?:AB|A|B|O)[-+].

Кроме того, если вы хотите убедиться, что единственной вещью в строке является группа крови, вам нужны якоря, чтобы она не соответствовала только части строки: ^(?:AB|A|B|O)[-+]$. Краткое примечание по якорям. В зависимости от вашего механизма регулярных выражений, ^ может соответствовать началу строки, а не началу строки, если вы передадите ей параметр многострочного совпадения. Аналогичным образом, $ может соответствовать концу строки, а не концу строки. По этой причине обычно используются три других якоря (но не% 100): \A, \Z и \z. Если ваш движок регулярных выражений поддерживает их, \A всегда соответствует началу строки, \Z соответствует концу строки или символу новой строки непосредственно перед концом строки, а \z соответствует только отправке строки.

2 голосов
/ 17 июня 2009

Скобки [] обозначают класс символов, что означает «любой из символов здесь». Вы хотите скобки () для группировки:

(A|B|AB|0)(\+|-)
0 голосов
/ 23 апреля 2017

Для нечувствительного к регистру атрибута шаблона html вы можете попробовать это

([AaBbOo]|[Aa][Bb])[\+-]


<input type="text" maxlength="3" pattern="([AaBbOo]|[Aa][Bb])[\+-]" required />
0 голосов
/ 30 июня 2015

^ (A | B | AB | O) [+ -] $? Это даст правильный выход.

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