使用模式匹配验证PHP中的字符串

时间:2012-05-25 13:52:34

标签: php

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

12时13分14秒

我知道我应该使用preg_match,但我无法弄清楚如何

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

由于

4 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:0)

$regex = "/\d\d\:\d\d\:\d\d/";

$subject = "12:13:14";

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

print_r($matches);

答案 2 :(得分:0)

if (preg_match ('/\d\d:\d\d:\d\d/', $input)) {
    // matches
} else {
    // doesnt match
}

\d表示任意数字,因此其中两个:之间的群组。

答案 3 :(得分:0)

您可以在$string = '23:24:25';

上使用preg_match进行数字比较
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');