Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用模式匹配验证PHP中的字符串_Php - Fatal编程技术网

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

使用模式匹配验证PHP中的字符串,php,Php,嘿,有人能帮我测试一下一个字符串是否匹配由冒号分隔的3个两位数数字吗?例如: 12:13:14 我知道我应该使用preg_match,但我不知道如何使用 最好第一个数字应该在0到23之间,第二个数字应该在0到59之间,就像一个时间一样,但我总是可以用if语句来解决这个问题 谢谢 \d表示任何数字,因此中间有:的两个数字组。您可以使用$string='23:24:25'上的数字比较 preg_match('~^(\d{2}):(\d{2}):(\d{2})$~', $string, $matche

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

12:13:14

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

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

谢谢

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

您可以使用
$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');
或者,您甚至可以放弃常规表达式,将其用于数字比较

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

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

此答案在整个字符串中进行正确匹配(其他答案将在更长的字符串中匹配regexp),无需任何额外测试:

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";
}

这里有一个学习正则表达式的很好的参考站点:分钟和秒字段必须是两位数字(例如,
:04:09
)还是没有前导零(例如,
:4:9
)?这些答案中的第一个将不接受小时的第二位大于3的字符串,或者分钟或秒的第二位是6、7或8的字符串(例如。“14:00:00”、“12:07:00”、“12:00:07”)。第二个答案将接受由垃圾(例如“012:34:56789”)四舍五入的正确值。第三个答案将接受非数字值(例如“a:b:c”)、缺少的部分(例如“12:34”)甚至是空字符串(“”)。在运行if之前,请检查if
sizeof($numbers)
返回
=2
你说得对!我更正了答案并删除了第一部分。我保留了其他部分,因为它们使用数字比较来验证字符串是否具有所需的格式。
$numbers = explode(':', $string);

if (count($numbers) != 3 || $numbers[0] > 23 || $numbers[1] > 59 || $numbers[2] > 59 ......)
    die('The digits are not right');
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";
}