正则表达式匹配 HH:MM、HH:MM:SS 或 HH:MM:SS.XXX

RegEx matching HH:MM, HH:MM:SS OR HH:MM:SS.XXX

到目前为止我有以下内容:

^(([0-1][0-9])|([2][0-3])):([0-5][0-9])(:([0-5][0-9]))?([.]\d{1,3})?$

这匹配(如预期)23:59、23:59:30、23:59:34.123 或 23:59:12.1 不匹配 23:60、23:59。 但不幸的是匹配 23:59.60 对如何进行最后润色有什么想法吗?

由于只有在秒出现时才允许使用毫秒,因此您应该将毫秒的可选部分嵌套在秒的可选部分中:

^(([0-1][0-9])|([2][0-3])):([0-5][0-9])(:[0-5][0-9](?:[.]\d{1,3})?)?$

Demo.

您必须将 \d{1,3} 更改为 \d{3} 以将毫秒部分限制为 .XXX(恰好出现三次):

^(([0-1][0-9])|([2][0-3])):([0-5][0-9])(:([0-5][0-9]))?([.]\d{3})?$
                                                              ↑

DEMO