0

在网上搜索验证时间为“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?

4

2 回答 2

6

日期时间解决方案

您可以使用DateTime::createFromFormat验证所有日期/时间字符串:

功能

function isTimeValid($time, $format = 'H:i:s') {
    $dt = DateTime::createFromFormat($format, $time);
    return $dt && $dt->format($format) == $time;
}

此函数可用于所有日期时间组合验证。例子

例子

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.
于 2013-09-11T12:19:04.680 回答
4

您应该添加一个分隔符:

preg_match("/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/", "12:33:51", $matches);

-in PHP 模式应与修饰符分隔。该分隔符应该是非字母数字的。

但是(正如在另一个很好的答案中所做的那样) - 为您的问题使用适当的工具要好得多 - 即通过DateTimeAPI 验证时间戳。

于 2013-09-11T12:18:20.637 回答