2016-03-02 4 views
0

Я работаю над регулярным выражением, которое должно допускать формат yyyymmdd-nn. (4-значный год между 2010 и 2059 годами, 2-значный месяц, 2-значный день, тире, а затем значение от 01 до 99).Нужно регулярное выражение, чтобы пустые значения

Это работает ... (20[1-5]\d(0|1)\d[0-3]\d-\d[1-9])

Вторая часть является то, что мне нужно, чтобы пустое значение. В идеале я бы хотел, чтобы он был нулевым, но это нормально, если это невозможно, и пользователь вводит до 11 пробелов.

Я пробовал различные варианты использования \ S

(\s{0-11})|(20[1-5]\d(0|1)\d[0-3]\d-\d[1-9])

(\s?)|(20[1-5]\d(0|1)\d[0-3]\d-\d[1-9])

(\s*)(20[1-5]\d(0|1)\d[0-3]\d-\d[1-9]).

Все это говорит мне, что существует бесконечное количество возможностей.

Я также пробовал ...

(20[1-5]\d(0|1)\d[0-3]\d-\d[1-9])|null

(20[1-5]\d(0|1)\d[0-3]\d-\d[1-9])?

^(20[1-5]\d(0|1)\d[0-3]\d-\d[1-9])?$

Ни один из них, кажется, чтобы пустое значение либо.

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

+2

Вы так близко. Попробуйте '^ (20 [1-5] \ d (0 | 1) \ d [0-3] \ d- \ d [1-9] |) $'. – ClasG

+0

Вы пытались начать с (\\ s *), вам может потребоваться двойная обратная косая черта. – Hughzi

ответ

2

Вы действительно близко. Вам нужно соответствовать вашим RE, или пустым строкам. Таким образом,

^(20[1-5]\d(0|1)\d[0-3]\d-\d[1-9]|)$ 

должен сделать трюк. (N.b. |, заканчивающем группу захвата.)

С уважением.

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