PHP Regex for Time选项HH:MM可选SS和可选的am / pm / AM / PM

时间:2014-11-08 23:46:57

标签: php regex preg-match

我需要一个符合以下时间的正则表达式模式:

  • 九点15分42秒
  • 上午09:15:42(或上午或下午或下午)
  • 9点15
  • 上午09:15(或上午或下午或下午)

这是我到目前为止所做的事情,但它没有让秒可选:

'~^(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);

由于

1 个答案:

答案 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

Live Demo