2013-04-05 2 views
1

у меня есть следующее регулярное выражение проверки:регулярное выражение времени

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 

Это в настоящее время принимает 00:00:00 или 00:00 или 00 Я не хочу это сделать. Может принимать 00:01 или 00:00:01, но не все нули.

Что я пропустил в регулярном выражении?

+0

Попробуйте этот слегка модифицированный вариант: '^ (?: (?: [01]? \ D | 2 [0-3])): (?: [0-5]? \ D) (? :: [0-5]? \ D)? $ ' – Dfr

ответ

3

Вы можете использовать отрицательные lookaheads для решения этой проблемы:

^(?!^(\D|0)*$)(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 

отрицательного предпросмотра, который соответствует nondigits и нулей. Таким образом, если у вас есть только нули в свое время, это не будет соответствовать.

Вы можете увидеть, что он делает более подробно на www.debuggex.com.

+0

отлично! благодаря! – Pindo

0

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

Что-то вроде этого: ^(00:?)+$ должно соответствовать тому, что вы не хотите. Просто используйте эту проверку, прежде чем использовать текущее регулярное выражение. Выполнение всего в одном регулярном выражении может быть беспорядочным, чтобы строить и изменять.

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