我正在探索正则表达式,并尝试使用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失败。我想在OR
和0-23h
0-59m
运算符的方式出了问题
答案 0 :(得分:4)
正如我在评论中提到的那样。原因是你的正则表达分钟:
[0-5][0-9]m
始终匹配两位数字,因此它会失败:0m
,1m
,2m
,... 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
都被接受了,分钟也一样!
要拒绝以0
或01h
01m
开头的时间戳,请使用以下正则表达式:
^(([0-9]h|1[0-9]h|2[0-3]h)|([0-9]m|[1-5][0-9]m))?$