时间选项的PHP Regex HH:MM可选SS和可选am/pm/am/pm


PHP Regex for Time options HH:MM optional SS and optional am/pm/AM/PM

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

  • 09:15:42
  • 上午09:15:42(或上午、下午或下午)
  • 09: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);

感谢

您需要在最后两组之后放置一个可选的量词?

~^(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

实时演示