2010-10-20 68 views
1

我使用正則表達式如下驗證格式dd/mm/yyyy日期在PHP中:PHP:時間驗證RegEx?

preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/", $e_startdate, $matches) 

但是這將是驗證時間,格式爲10:20 PMAM的正則表達式。我想要一個正則表達式來驗證以下格式。

<number><number><colon><number><number><space><AM or PM> 

感謝

回答

3

以下應驗證您請求的格式:

preg_match("/(\d{2}):(\d{2}) (AM|PM)/", $e_startdate, $matches); 

注意這不一定是有效的時間。你可能輸入像32:62 AM之類的東西。你需要這樣的時間驗證:

preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", $e_startdate, $matches); 

心靈匹配整個事情不區分大小寫(就像我在第二個例子中所做的那樣)。否則小寫am,pm等都不會起作用。

+0

我想只接受12小時的格式,所以你的regex'/(0?\ d | 11 | 12):(0 \ d | [0-5] \ d)(AM | PM)/ i' this只會接受12小時格式的權利? – Prashant 2010-10-20 09:12:53

+0

@Prashant:那就對了。這將僅匹配12小時格式。 – jwueller 2010-10-20 09:13:30

+0

@elusive:將它與preg_match匹配後,我會在'$ matches'變量中得到什麼?我需要HH MM和AM | PM作爲'$ matches'變量中單獨的數組元素嗎? – Prashant 2010-10-20 09:14:59

5

您可以使用正則表達式:

(0[0-9]|1[0-2]):[0-5][0-9] [AP]M 
+0

前面0應該是可選的,以接受在格式'上午1點23分的時間「而這將接受'00:00 AM」或' 00:49 PM'這是非法的。 '(0 [1-9] | [1-9] | 1 [0-2]):[0-5] [0-9] [AP] M'應該爲那些人工作。 – 2010-10-20 08:58:02

+0

如果你可以解釋,我沒有得到這個部分'(0 [0-9] | 1 [0-2])'這意味着什麼。謝謝! – Prashant 2010-10-20 09:01:20

+0

@Prashant:意思是'0 [0-9]'或'1 [0-2]'。 '0 [0-9]'表示後面跟着任意數字的'0'。 '1 [0-2]'表示'1',後面是'0或1或2'。 – codaddict 2010-10-20 09:03:04

1

/\ d {2}:\ d {2}(AM | PM)/

0

我從難以捉摸的答案開始,但需要更多的靈活性。這一個使分鐘可選,以及AM/PM

/(0?\d|1[0-2])(:(0\d|[0-5]\d))?[ ]?(A|P)M/i 
2

正則表達式前的空格:

(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9]) 

驗證時間在MySQL時間格式。 24小時結腸分隔小時:分:秒hh:mm:ss

比賽時間:09:30:00 | 17:45:20 | 23時59分59秒

非匹配:24:00:00

+0

問題是關於12小時的時間格式... – Sven 2012-10-19 22:34:58

+0

/([0-1] [0-9] | 2 [0-3]):[0-5] [0-9]:[0-5 ] [0-9] /輕微簡化 – zzapper 2014-07-17 15:07:36