我想要一个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。


当前回答

我的是:

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

这个要短得多

用几个例子进行了测试

匹配:

00:00 7:43 07:43 19:00 18:23

并且不匹配任何无效的实例,如25:76等…

其他回答

你可以使用这个正则表达式:

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

如果要排除00:00,可以使用这个表达式

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

第二个表达式是更好的选择,因为有效时间是00:01到00:59或0:01到23:59。您可以根据需要使用其中任何一种。 Regex101链接

描述

小时:分钟:

强制am|pm或am|pm 强制引导零点05:01而不是5:1 从1点到12点 Hours不接受00为00:16 am 从00到59分

01:16 am✅ 01:16 am✅ 01:16❌(miss am|pm) 01:16 Am❌(Am必须全部小写或大写) 凌晨1:16❌(小时错过前导零) 00:16❌(无效时间值00)

正则表达式

匹配单个事件: ^ (0 (1 - 9) | 1 [0]): ([0 - 9] [0 - 5]) ((| p) m | | p m)美元

要匹配多个事件: 移除^ $ (0 (1 - 9) | 1 [0]): ([0 - 9] [0 - 5]) ((| p) m | | p m)

对上面的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点 等。

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

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

时间的正则表达式

HH:MM 12小时格式,前导0可选 / ^(0 ?(1 - 9) | 1[0]):[0 - 9][0 - 5] /美元 HH:MM 12小时格式,可选前导0,必选经脉(AM/PM) (0 - 2) /((1 | 0 ?[1 - 9]):([0 - 9][0 - 5]) ?([前不久](Mm))) / HH:MM 24小时,前导0 / ^(0[0 - 9][0 - 9] | | 1 2(0 - 3)):[0 - 9][0 - 5] /美元 HH:MM 24小时格式,前导0可选 / ^([0 - 9][0 - 9][0 - 9] | 1 | 0 | 2(0 - 3)):[0 - 9][0 - 5] /美元 HH:MM:SS 24小时格式,前导0 / (?: [01] \ d | 2 (0 - 3)): (?: (0 - 5) \ d): (?: (0 - 5) \ d) /

参考及示范