我需要一个符合以下时间的正则表达式模式:
这是我到目前为止所做的事情,但它没有让秒可选:
'~^(0[0-9]|1[0-2]):([0-5][0-9])(:[0-5][0-9])\h*?([ap]m)$~i'
代码是:
$pattern = '~^(0[0-9]|1[0-2]):([0-5][0-9])(:[0-5][0-9])\h*?([ap]m)$~i';
return preg_match($pattern, $time);
由于
答案 0 :(得分:1)
您需要在最后两组之后放置一个可选的量词?
。
~^(0[0-9]|1[0-2]):([0-5][0-9])(:[0-5][0-9])?\h*([ap]m)?$~i
但是,如果您想获取每个组的匹配结果而不是验证字符串,则上面将捕获第三组内的冒号。您可以使用以下表达式简化和修复行为。
~^(0\d|1[0-2]):([0-5]\d)(?::((?2)))?\h*([ap]m)?$~i