当给出小时值时,我无法获得正则表达式匹配。如何获得可能的小时匹配(有或没有前导零)?
$val = '01:04:06'; // doesn't match
$val = '1:04:06'; // doesn't match
$val = '04:06'; // matches
$val = '4:06'; // matches
preg_match("/^([\d]{1,2})\:([\d]{2})$/", $val, $matches);
答案 0 :(得分:1)
只需删除潜在客户^
如果您需要分钟和秒数,可以将正则表达式重写为/(\d?\d):(\d?\d)$/
。
如果您想要(可选)小时,请改为编写/((\d?\d):)?(\d?\d):(\d?\d)$/
。
答案 1 :(得分:0)
如果你想将它作为一个整体匹配,只需为第一个序列创建一个组,直到:
,并添加一个量词,这样可能会发生1到2次。
/^(([\d]{1,2})\:){1,2}([\d]{2})$/
答案 2 :(得分:0)
这是来自类似stackoverflow post的另一个,但转换为preg_match:
preg_match("/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/", $val, $matches);