我有以下正则表达式:
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
这目前将接受00:00:00
或者
我不希望它这样做00:00
。00
它可以接受00:01
或00:00:01
不全为零。
我在正则表达式中错过了什么?
您可以使用负前瞻来解决此问题:
^(?!^(\D|0)*$)(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
匹配非数字和零的负前瞻。因此,如果您的时间只有零,它将无法匹配。
您可以在www.debuggex.com上更详细地了解它的作用。
我认为拥有另一个匹配您不想要的任何内容的正则表达式可能会更容易。
像这样:^(00:?)+$
应该匹配你不想要的。只需在使用当前正则表达式之前使用该检查即可。在一个正则表达式中完成所有操作可能会导致构建和更改变得混乱。