我有/^(?:1[0-2]|0[0-9]):[0-5][0-9]:[0-5][0-9]$/
模式可以在PHP中运行但是当我尝试在Js中使用它时,它不起作用。我想只匹配强制前导零的两种格式:00:00:00或00:00
答案 0 :(得分:1)
您需要将包含小时数的小组设为可选小时,然后将?
放在小组之后,并将其后面的冒号放入小组中。
console.log(/^(?:1[0-2]|0[0-9]:)?[0-5][0-9]:[0-5][0-9]$/.test("00:00:00"));
console.log(/^(?:1[0-2]|0[0-9]:)?[0-5][0-9]:[0-5][0-9]$/.test("00:00"));
我敢打赌你在PHP版本中有这个,因为这似乎是首先拥有非捕获组的唯一原因。你可能只是在复制到Javascript时错过了它。
答案 1 :(得分:0)
如果您想要可选的小时数,那么只需将模式的小时部分设为可选:
^(?:(?:1[0-2]|0[0-9]):)?[0-5][0-9]:[0-5][0-9]$
console.log(/^(?:(?:1[0-2]|0[0-9]):)?[0-5][0-9]:[0-5][0-9]$/.test("10:00:00"));
console.log(/^(?:(?:1[0-2]|0[0-9]):)?[0-5][0-9]:[0-5][0-9]$/.test("00:00"));
答案 2 :(得分:0)
为了也匹配00:00,我假设第一部分的小时必须是可选的。
此正则表达式还会将小时/分钟/秒放入捕获组$ 1 $ 2 $ 3。
^(?:(1[0-2]|0[0-9])[:])?([0-5][0-9])[:]([0-5][0-9])$
测试代码段
const reg = /^(?:(1[0-2]|0[0-9])[:])?([0-5][0-9])[:]([0-5][0-9])$/;
strings = ["00:00:00","00:00","12:01","24:59","59:59","12:59:59",
"14:15:16","00:60","60:00","0:0:0"]
for (const s of strings) {
console.log(s+" : "+reg.test(s));
}

24小时制表示法" 00:00:00"直到" 23:59:59" &安培; " 00:00"直到" 59:59",可以使用下面的模式
^(?:([01][0-9]|2[0-3])[:])?([0-5][0-9])[:]([0-5][0-9])$