持续时间的正则表达式

时间:2018-01-31 04:40:17

标签: javascript regex

我正在探索正则表达式,并尝试使用javascript中提到的正则表达式匹配以下模式

模式:0 to 23h OR 0 to 59m

示例:预期字符串:0h到23h或0m到59m

正则表达式:/^(([0-1]?[0-9]h|2[0-3]h)|([0-5][0-9]m))?$/

它成功验证0-23h但是0-59m失败。我想在OR0-23h

之间使用0-59m运算符的方式出了问题

2 个答案:

答案 0 :(得分:4)

正如我在评论中提到的那样。原因是你的正则表达分钟:

[0-5][0-9]m

始终匹配两位数字,因此它会失败:0m1m2m,... 9m。要解决此问题,只需在?之后添加[0-5],以便可以选择忽略它:

[0-5]?[0-9]m

整个正则表达式:

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

答案 1 :(得分:1)

这个正则表达式怎么样:

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

在此测试:https://regex101.com/r/exDcKs/2

然而请注意这个正则表达式

00h or 0h
01h or 1h
02h or 2h
03h or 3h
04h or 4h
05h or 5h
06h or 6h
07h or 7h
08h or 8h
09h or 9h

都被接受了,分钟也一样! 要拒绝以001h 01m开头的时间戳,请使用以下正则表达式:

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

https://regex101.com/r/exDcKs/3