2013-04-05 73 views
1

我有以下的正則表達式:正則表達式檢查時間

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

目前這將接受00:00:0000:0000 我不希望它這樣做。 它可以接受00:0100:00:01但不是全爲零。

我有什麼在正則表達式錯過了什麼?

+0

試試這個略有修改的變體: '?(?:(?:[01]?\ d | 2 [0-3])):(?:[0-5]?\ d)(?:: [0-5]?\ d)?$' – Dfr 2013-04-05 07:01:03

回答

3

您可以使用否定向前看符號來解決這個問題:

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

匹配非數字和零負前瞻。因此,如果你的時間只有零,它將無法匹配。

你可以看看它更詳細的www.debuggex.com

+0

完美!謝謝! – Pindo 2013-04-05 06:54:30

0

我認爲可能會更容易有另一個正則表達式,它會匹配不管你不想要什麼。

事情是這樣:^(00:?)+$應該與你不想要的東西。在使用當前的正則表達式之前,只需使用該檢查。在一個正則表達式中做所有事情可能會造成混亂,無法進行構建和更改。