完全验证带有或不带有http或https的URL

问题描述 投票:0回答:5

我对 PHP 中验证 URL 进行了一些研究,发现 StackOverflow 上有很多不同的答案,有些比其他答案更好,有些则非常旧且过时。

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

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

PHP 带有一个 函数来验证 URL ,但是,如果 URL 没有

http://
,它会将其标记为无效。

如何验证任何类型的 URL,无论是否带有

http://
https://
,以确保 URL 有效?

谢谢。

php regex
5个回答
25
投票

按照您的说明使用

filter_var()
,但是,根据定义,URL 必须包含协议。仅使用
http
也会检查
https

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

然后:

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

3
投票

我也看到过这样的使用:

$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


0
投票

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

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

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

}

0
投票

这个问题来自十年前,我的答案可能不适用于所有情况,但最好的方法可能是向该网址发送一个小请求,看看它是否有效。


-2
投票

你也可以让 html 验证 url:

Website: <input type="url" name="website" required pattern="https?://.+">
© www.soinside.com 2019 - 2024. All rights reserved.