用于匹配HH:MM时间格式的正则expression式

我想要一个正则expression式来匹配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。

你原来的正则expression式有缺陷:例如,它不会匹配04:00

这可能会更好地工作:

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

以上都没有为我工作。 最后我用了:

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

逻辑:

第一个数字(小时)是:0到19之间的数字 – > [0-1]?[0-9] (允许单个数字)
要么
20-23之间的数字 – > 2[0-3]

第二个数字(分钟)始终是00和59之间的数字 – > [0-5][0-9] (不允许单个数字)

令人惊讶的是,我发现实际上所有这些都没有完全覆盖它,因为它们不适用于0:0的短格式午夜,有些在00:00也不工作,我使用并testing了以下内容:

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

HH:MM最好不要冒任何风险。

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

你可以使用这个正则expression式:

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

如果你想排除00:00,你可以使用这个expression式

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

第二个expression式是更好的select,因为有效时间是00:01到00:59或0:01到23:59。 你可以根据你的要求使用这些。 Regex101链接

你可以使用这个24H,秒是可选的

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

宣布

 private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]"; public boolean validate(final String time) { pattern = Pattern.compile(TIME24HOURS_PATTERN); matcher = pattern.matcher(time); return matcher.matches(); } 

当string与正则expression式匹配时,此方法返回“true”。

你可以使用下面的正则expression式:

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

火柴:

 2:9
 2:09
 2:59
 02:9
 02:09
 02:59
 23:59

用它:

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

我的是:

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

这个要短得多

用几个例子来testing它

比赛:

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

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

我build立了这个正则expression式

 \d{1,2}\s{0,2}(am|pm|([-|:|h| ]\s{0,2}\d{1,2}\s{0,2})?)\s{0,2}(-|to|till|,|untill)\s{0,2}\d{1,2}\s{0,2}(am|pm|([-|:|h| ]\s{0,2}\d{1,2}\s{0,2})?) 

寻找一个用户指定的时间戳,例子什么它将拾取包括,但绝对不限于;

 8:30-9:40 09:40-09 : 50 09 : 40-09 : 50 09:40 - 09 : 50 08:00to05:00 08 : 00to05 : 00 08:00 to 05:00 8am-09pm 08h00 till 17h00 8pm-5am 08h00,21h00 06pm untill 9am 

只要时间包括数字,它也将拾起更多

你可以尝试以下

 ^\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 

你可以使用下面的正则expression式:

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

只有我所做的修改是最左边的数字是可选的。 其余的正则expression式是相同的。

尝试以下

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

注:我假设的JavaScript正则expression式引擎。 如果不是这样,请让我知道。