我想要一个regexp来匹配HH:MM格式的时间。以下是我所拥有的,而且它很有效:

^[0-2][0-3]:[0-5][0-9]$

它匹配从00:00到23:59的所有内容。

但是,我想改变它,所以0:00和1:00等也匹配,以及00:00和01:30。也就是说,让最左边的数字是可选的,以匹配HH:MM和H:MM。

有什么想法可以改变吗?我需要这个工作在javascript以及php。


当前回答

你可以使用以下正则表达式:

^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$

其他回答

你可以使用以下正则表达式:

^[0-2]?[0-3]:[0-5][0-9]$

我所做的唯一修改是最左边的数字是可选的。正则表达式的其余部分是相同的。

您原来的正则表达式有缺陷:例如,它不能匹配04:00。

这可能会更好:

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

上面的答案对我都没用,下面这个有用。

"[0-9]{2}:[0-9]{2}"

你可以试试下面的方法

^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$

它可以检测以下模式:

2300 
23:00 
4 am 
4am 
4pm 
4 pm
04:30pm 
04:30 pm 
4:30pm 
4:30 pm
04.30pm
04.30 pm
4.30pm
4.30 pm
23:59 
0000 
00:00

对上面的Manish M Demblani的贡献做了一个小小的修改 处理4点 (我摆脱了秒部分,因为我不需要它在我的应用程序)

^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$

处理: 4点 4点 4:00 4:00am 下午4点 4.30点 等。