使用模式匹配验证PHP中的字符串
嘿,有人能帮我测试一下一个字符串是否匹配由冒号分隔的3个两位数数字吗?例如: 12:13:14 我知道我应该使用preg_match,但我不知道如何使用 最好第一个数字应该在0到23之间,第二个数字应该在0到59之间,就像一个时间一样,但我总是可以用if语句来解决这个问题 谢谢使用模式匹配验证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
\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之前,请检查ifsizeof($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";
}