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

Cli*_*ote 148 regex

我想要一个正则表达式来匹配HH:MM格式的时间.这是我拥有的,它的工作原理:

^[0-2][0-3]:[0-5][0-9]$
Run Code Online (Sandbox Code Playgroud)

这匹配从00:00到23:59的所有内容.

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

任何想法如何改变?我需要这个工作在JavaScript和PHP.

Pet*_* O. 335

您的原始正则表达式存在缺陷:04:00例如,它不匹配.

这可能会更好:

^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$
Run Code Online (Sandbox Code Playgroud)

  • 此regExp适用于没有前导零的时间.带有前导零的时间的RegExp是'^([0 [0-9] | 1 [0-9] | 2 [0-3]):[0-5] [0-9] $` (42认同)
  • @SergO请仔细阅读他的回答.他的答案是领先零和没有. (12认同)
  • 稍短的形式是`^(?:\ d | [01]\d | 2 [0-3]):[0-5]\d $` (10认同)
  • @SergO不应该是^(0 [0-9] | 1 [0-9] | 2 [0-3]):[0-5] [0-9] $? (9认同)
  • 在C#中也能很好地工作。 (2认同)
  • @Martin抱歉,但为什么不简单地`^([0-1][0-9]|2[0-3]):[0-5][0-9]$`?对于 HH:MM,即不匹配 H:MM。 (2认同)

小智 48

以上都不适合我.最后我使用了:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ (js engine)
Run Code Online (Sandbox Code Playgroud)

逻辑:

第一个数字(小时)是:0到19之间的数字 - > [0-1]?[0-9](允许单个数字)

20 - 23之间的数字 - >2[0-3]

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

  • 你不需要第一个方括号中的破折号,`[01]`也适用;) (8认同)
  • 这个答案修改为只接受12小时的时间(包括可选的前导零):`^(0?[1-9] | 1 [0-2]):[0-5] [0-9] $` (3认同)

Nik*_*hak 33

正则表达时间

参考和演示

  • 谢谢!这个答案应该放在顶部。 (2认同)

小智 7

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

^([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[0-5][0-9])?$
Run Code Online (Sandbox Code Playgroud)


小智 5

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

^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$
Run Code Online (Sandbox Code Playgroud)


小智 5

最好的方法是 HH:MM,无需承担任何风险。

^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
Run Code Online (Sandbox Code Playgroud)

  • 这可以缩短为“^([0-1]\d|2[0-3]):[0-5]\d$”吗? (3认同)