当$url_xxx = www.googlecom
或http://www.5555testetstcom
或http://wwwgooglecom
时,它会回显OK
为什么?
<?PHP
$url_xxx = mysqli_real_escape_string($db_mysqli,$_POST['url_xxx']);
if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$url_xxx))
{
echo "URL incorrect format";
}
else
{
echo "OK";
}
?>
答案 0 :(得分:0)
你的正则表达形状很糟糕。你可以分三部分来分解它;
你的表达式是&#34;以{1}开头的任何内容,然后是{2},可以出现0到多次,然后是{3}(这是任何东西)&#34;
所以,好吧,由于*修饰符,因为{2}是可选的,所以它最终读作&#34;任何以http://开头并且后跟任何匹配的内容
首先,我建议您在构建时使用Rubular检查正则表达式,它是一个真正有用的网站http://rubular.com。如果你想修复正则表达式,你至少应该在中间需要一些点。
其次,对于这个特殊情况,你应该检查戈登的回复 Best way to check if a URL is valid
从那里剪断了响应:
if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
die('Not a valid URL');
}