使用php检查url格式无法正常工作

时间:2016-12-01 16:29:29

标签: php

$url_xxx = www.googlecomhttp://www.5555testetstcomhttp://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";
}
?>

1 个答案:

答案 0 :(得分:0)

你的正则表达形状很糟糕。你可以分三部分来分解它;

  1. \ b(?:(?:https?| ftp):// | www。)(以http或https等开头)
  2. [ - a-z0-9 +&amp; @#/%?= ~_ |!:,。;] *(任何字符)
  3. [ - a-z0-9 +&amp; @#/%= ~_ |](任何角色)
  4. 你的表达式是&#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');
    }