Javascript 持续时间的正则表达式

Javascript 持续时间的正则表达式,javascript,regex,Javascript,Regex,我正在探索正则表达式,并尝试使用javascript中提到的正则表达式匹配以下模式 模式:0到23小时或0到59米 示例:预期字符串:0h到23h或0m到59m 正则表达式:/^(([0-1]?[0-9]h | 2[0-3]h)|([0-5][0-9]m))?$/ 成功验证0-23h,失败0-59m。我猜或运算符在0-23h和0-59m之间使用时出现了一些问题,这个正则表达式呢: ^(([0-1]?[0-9]h|2[0-3]h)|([0-5]?[0-9]m))?$ 此处测试: 但是请注意,

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

模式:
0到23小时或0到59米


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

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

成功验证0-23h,失败0-59m。我猜
运算符在
0-23h
0-59m
之间使用时出现了一些问题,这个正则表达式呢:

^(([0-1]?[0-9]h|2[0-3]h)|([0-5]?[0-9]m))?$
此处测试:

但是请注意,使用这个正则表达式

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))?$
这个正则表达式怎么样:

^(([0-1]?[0-9]h|2[0-3]h)|([0-5]?[0-9]m))?$
此处测试:

但是请注意,使用这个正则表达式

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

正如我在评论中提到的那样。原因是您的regex的分钟数:

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

正如我在评论中提到的。原因是您的regex的分钟数:

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

你到底想匹配什么?因为这与
“0-23h”
“0-59m”
“0-23h或0-59m”
不匹配。如果您的意思是
0-59
,例如在0和59之间的数字中,例如
25m
,那么您没有匹配单个数字,例如
9m
。因此,添加
([0-5]?[0-9]m)
regex
并不是此项工作最合适的工具。它可以用来匹配数字,然后使用常用的JavaScript比较运算符来验证数字是否属于所需的范围?因为这与
“0-23h”
“0-59m”
“0-23h或0-59m”
不匹配。如果您的意思是
0-59
,例如在0和59之间的数字中,例如
25m
,那么您没有匹配单个数字,例如
9m
。因此,添加
([0-5]?[0-9]m)
regex
并不是此项工作最合适的工具。它可以用来匹配数字,然后使用常用的JavaScript比较运算符来验证数字是否属于所需的范围。