使用或不使用http或https完全验证URL

时间:2013-12-18 22:16:41

标签: php regex

我已经做过一些关于在PHP中验证URL的研究,发现StackOverflow上有很多不同的答案,有些答案比其他答案好,还有一些非常陈旧和过时。

我有一个用户可以输入网站网址的字段。用户应该能够以任何形式输入URL,例如:

example.com
www.example.com
http://example.com
http://www.example.com
https://example.com
https://www.example.com

PHP附带function to validate URLs,但是,如果该网址没有http://,则会将该网址标记为无效。

如何验证任何类型的网址,包括或不包含http://https://,以确保网址有效?

感谢。

4 个答案:

答案 0 :(得分:8)

如您所述使用filter_var(),但根据定义,网址必须包含协议:

$url = strpos($url, 'http') !== 0 ? "http://$url" : $url;

然后:

if(filter_var($url, FILTER_VALIDATE_URL)) {
    //valid
} else {
    //not valid
}

答案 1 :(得分:0)

我也看到过这个:

$url = "http://example.com";
if (preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url)) {
  echo "URL is valid";
}
else {
  echo "URL is invalid";
}

来源:http://codekarate.com/blog/validating-url-php

答案 2 :(得分:0)

你也可以让html验证网址:

Website: <input type="url" name="website" required pattern="https?://.+">

答案 3 :(得分:-1)

您可以创建一个自定义验证规则,然后在其中添加以下方法:

protected function prepareForValidation()
{
        $urlWithHttp = strpos($this->url, 'http') !== 0 ? "http://$this->url" : $this->url;

        $this->merge([
            'url' => $urlWithHttp,
        ]);

}