在网上搜索验证时间为“HH:MM:SS”之后我发现了这个: Regex pattern for HH:MM:SS time string。但当我把它放在我的PHP代码中时,我收到一个错误:
preg_match("^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$", "12:33:51", $matches);
这是我的错误消息
警告:preg_match():在第128行的db-dataitem.php中找不到结尾分隔符'^'
如何更改模式字符串以使其适用于PHP?
答案 0 :(得分:6)
您可以使用DateTime::createFromFormat验证所有日期/时间字符串:
function isTimeValid($time, $format = 'H:i:s') {
$dt = DateTime::createFromFormat($format, $time);
return $dt && $dt->format($format) == $time;
}
此功能可用于所有日期时间组合验证。 Examples
foreach (['12:30:54', '13:30:65', '00:00:00', '00:70:00'] as $time) {
echo "Time '$time' is " . (isTimeValid($time) ? "" : "not ") . "valid.\n";
}
Time '12:30:54' is valid.
Time '13:30:65' is not valid.
Time '00:00:00' is valid.
Time '00:70:00' is not valid.
答案 1 :(得分:4)
您应该添加分隔符:
preg_match("/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/", "12:33:51", $matches);
-in PHP模式预期来自修饰符to be delimited。该分隔符应为非字母数字。
但是(正如在另一个好的答案中所做的那样) - 为您的问题使用适当的工具要好得多 - 即通过DateTime
API验证时间戳。