2010-10-20 61 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