2014-01-22 2 views
0

Я пытаюсь создать регулярное выражение, которое будет сравнивать код, который МОЖЕТ начать с SE, но не обязательно. Примеры:Regex MIGHT start with SE

ХХХХХ

ХХХХХ

XXX XX

SEXXXXX

SEXXXXX

SEXXX ХХ

SE ХХХХХ

SE XXX-XX

SE XXX XX

То, что я до сих пор:/^ (s е?) (\ S?) (\ D {3}) (\ S | -) (\ d {2}) $/я;

, но проблема в том, что он может начинаться только с s или только e. Какие-либо предложения?

ответ

1

s?e? часть проверит либо s, либо e.

Попробуйте следующие вместо:

/^(?:se)? ?\d{3}[- ]?\d{2}$/i 
+0

Это сработало отлично :) Спасибо – MaGi

0

Я хотел бы написать /^ (SE \ S) {0,1} (\ d {3}) (\ S | -) (\ d {2}) $/I

0

Путь у вас это выглядит хорошо, если я понимаю ваши требования. s?e? часть позволит ему начать с SEили только Sили только E, который звучит как то, что вы хотите. Но вам не нужна большая часть этих круглых скобок, если вы не пытаетесь отделить разные сегменты кода от групп захвата. Кроме того, это выглядит некорректно: (\s|-?) Я думаю, что он по-прежнему будет работать, если там нет \s или -, но это неловкий способ его написания.

Я думаю, что это должно работать нормально:

/^s?e?\s?\d{3}[\s-]?\d{2}$/i 

Если вы НЕ хотите, чтобы начать с только S, только E или пробел, а затем использовать это:

/^(se\s?)?\d{3}[\s-]?\d{2}$/i 
+0

Проблема не в скобках было, это было (как VISION сказал) s е? проверяет оба, что не работает. – MaGi

+0

@MaGi - Я не был уверен, что вы хотите разрешить только S/только E. Если вы этого не сделаете, второй шаблон - это то, что вам нужно. Проблема была не в скобках, это было всего лишь случайное предложение. –