PHP,使用域扩展的url验证

时间:2017-06-11 19:04:46

标签: php regex validation

我一直在尝试使用FILTER_VALIDATE_URL以及正则表达式来验证网址,但没有运气。

例如:

$url = "http://www.stackoverflow";

    if (preg_match("/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/", $url)) {
      echo "URL is valid";
    }
    else {
      echo "URL is invalid";
    }
        echo("$url is not a valid URL");
    }

以上将显示有效的网址,即使省略了域名扩展名,FILTER_VALIDATE_URL也是如此

我想要的是仅在以下列格式输入时验证网址:

http://www.stackoverflow.com
https://www.stackoverflow.com
http://stackoverflow.com
https://stackoverflow.com

类似的东西:

http://stackoverflow
https://stackoverflow
http://www.stackoverflow
https://www.stackoverflow

应无效。

当然它应该适用于任何类型的域名扩展。

1 个答案:

答案 0 :(得分:0)

如果你想使用FILTER_VALIDATE_USE,根据documentation,你应该使用:

  

FILTER_FLAG_HOST_REQUIRED - 网址必须包含主机名(如http://www.example.com

像:

<?php
$url = "https://www.stackoverflow.com";

if (filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)) {
    echo("$url is a valid URL");
} else {
    echo("$url is not a valid URL");
}
?>

这应该有效。希望它有所帮助!

修改

代码的结果:

  

stackoverflow.com不是有效的网址

     

http://stackoverflow.com是有效的网址

     

http://www.stackoverflow.com是有效的网址

     

ww.stackoverflow.com不是有效的网址

     

http://stackoverflow是有效的网址

正如@mickmackusa所说,我删除了正则表达式片段,如果你想要正则表达式,你可以使用:

validate url with regular expressions

或者:

URL Validation REGEX - URL just valid with http://