0

嘿,有人可以帮我测试一个字符串是否与用冒号分隔的 3 个两位数匹配吗?例如:

12:13:14

我知道我应该使用 preg_match 但我不知道如何

最好第一个数字应该在 0 到 23 之间,第二个数字应该在 0 到 59 之间,就像时间一样,但我总是可以用 if 语句解决这个问题。

谢谢

4

4 回答 4

1

此答案在整个字符串中正确匹配(其他答案将匹配较长字符串中的正则表达式),无需任何额外测试:

if (preg_match('/^((?:[0-1][0-9])|(?:2[0-3])):([0-5][0-9]):([0-5][0-9])$/', $string, $matches))
{
    print_r($matches);
}
else
{
    echo "Does not match\n";
}
于 2012-05-25T14:41:54.380 回答
0
$regex = "/\d\d\:\d\d\:\d\d/";

$subject = "12:13:14";

preg_match($regex, $subject, $matches);

print_r($matches);
于 2012-05-25T13:55:15.370 回答
0
if (preg_match ('/\d\d:\d\d:\d\d/', $input)) {
    // matches
} else {
    // doesnt match
}

\d表示任何数字,因此中间有两个数字:

于 2012-05-25T13:55:53.437 回答
0

您可以将preg_match与数字比较一起使用$string = '23:24:25';

preg_match('~^(\d{2}):(\d{2}):(\d{2})$~', $string, $matches);

if (count($matches) != 3 || $matches[1] > 23 || $matches[2] > 59 || $matches[3] > 59 ......)
    die('The digits are not right');

或者您甚至可以放弃常规表达式并使用带数字比较的explode 。

$numbers = explode(':', $string);

if (count($numbers) != 3 || $numbers[0] > 23 || $numbers[1] > 59 || $numbers[2] > 59 ......)
    die('The digits are not right');
于 2012-05-25T14:03:46.177 回答