持续时间的正则表达式



我正在探索正则表达式,我试图使用 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 失败。我想在 0-23h0-59m 之间使用 OR 运算符的方式出了问题

正如我在评论中提到的。原因是因为您的正则表达式几分钟:

[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))?$

这个正则表达式呢:

^(([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

都被接受,这在会议记录中是一样的!!要拒绝以 01h01m0开头的时间戳,请使用以下正则表达式:

^(([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

最新更新