我对 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 有效?
谢谢。
按照您的说明使用
filter_var()
,但是,根据定义,URL 必须包含协议。仅使用 http
也会检查 https
:
$url = strpos($url, 'http') !== 0 ? "http://$url" : $url;
然后:
if(filter_var($url, FILTER_VALIDATE_URL)) {
//valid
} else {
//not valid
}
我也看到过这样的使用:
$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";
}
您可以创建自定义验证规则,然后在其中添加以下方法:
protected function prepareForValidation()
{
$urlWithHttp = strpos($this->url, 'http') !== 0 ? "http://$this->url" : $this->url;
$this->merge([
'url' => $urlWithHttp,
]);
}
这个问题来自十年前,我的答案可能不适用于所有情况,但最好的方法可能是向该网址发送一个小请求,看看它是否有效。
你也可以让 html 验证 url:
Website: <input type="url" name="website" required pattern="https?://.+">