解析url - php,检查方案是否存在,验证url regex

时间:2010-11-26 08:00:15

标签: php regex

这是验证发布网址的好方法吗?

if (filter_var($_POST['url'], FILTER_VALIDATE_URL)){
    echo "valid url";
}else{
    echo "invalid url";
}

这是我开始写的内容,因为我可以用它显示多条错误消息:

function validateURL($url)
{
$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';
return preg_match($pattern, $url);
}

$result = validateURL($_POST['url']);
if ($result == "1"){
 $scheme = parse_url($_POST['url'], PHP_URL_SCHEME);
 if (isset($scheme)){
  echo $scheme . "://" . parse_url($_POST['url'], PHP_URL_HOST);
 }else{
  echo "error you did not enter http://";
 }
}else{
 echo "your url is not a valid format";
}

3 个答案:

答案 0 :(得分:1)

我只是去内置FILTER_VALIDATE_URL并使用如下的一般错误消息:

  

网址无效。请记得同时输入http://

如果你很好,你可以检查前7/8个字母是http://还是https://,如果没有,可以预先添加。

如果问题已经解决,那么你应该进入并维护这样一个RegEx。除非您正在解释URL格式,否则通常也不需要在错误消息中更详细。

答案 1 :(得分:1)

答案 2 :(得分:0)

我认为简单

filter_var($var, FILTER_VALIDATE_URL)

并通过strpos()检查协议就足够了,因为如果想要,用户可以给你错误的(不存在的)url。

当然,您可以检查域是否存在并返回有效的http状态,但我认为这有点夸大其词。