正则表达式匹配hh:mm:ss可选小时数

时间:2018-05-20 10:00:36

标签: javascript

我有/^(?:1[0-2]|0[0-9]):[0-5][0-9]:[0-5][0-9]$/模式可以在PHP中运行但是当我尝试在Js中使用它时,它不起作用。我想只匹配强制前导零的两种格式:00:00:00或00:00

3 个答案:

答案 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])$