2013-11-13 4 views
1

мне было интересно, можно ли упростить регулярное выражение, как этотСделать это регулярное выражение короче

/^[0-9]{2}[ .-]?[0-9]{2}[ .-]?[0-9]{2}[ .-]?[0-9]{2}[ .-]?[0-9]{2}$/ 

во что-то более короткий

что-то вроде

/^([([0-9]{2})([ .-]?))]{4})[0-9]$/ 

, но я не» Кажется, это правильно, и даже не приблизиться к этому.

ответ

4

Это регулярное выражение:

/^[0-9]{2}[ .-]?[0-9]{2}[ .-]?[0-9]{2}[ .-]?[0-9]{2}[ .-]?[0-9]{2}$/ 

может быть сокращен до:

/^(?:[0-9]{2}[ .-]?){4}[0-9]{2}$/ 
+0

Который, в PHP, и если вы не заинтересованы в захвате групп, может быть сокращен до '/^(? \ D \ d [.-]) {4} \ d \ d $/'. –

+0

@ acheong87: Поскольку OP не захватывал ничего, я использовал '(?: ...)', чтобы избежать группы захвата. – anubhava

2

проверить это:

^([0-9]{2}[ .-]?){5}$ 

Regular expression visualization

Это намного короче, но будет также соответствовать 11-11-11-11-11-. Точный эквивалент отправлен @anubhava.

Вы оригинальный регулярное выражение выглядит следующим образом: Regular expression visualization

+1

'11.11.11.11.11.' проходит. –

+0

Это позволит использовать «нижнее ИЛИ пробел ИЛИ точка», которое не допускается исходным регулярным выражением. – anubhava

+0

Правильный, обновленный ответ. – rzymek

Смежные вопросы