我已经做过一些关于在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://
,以确保网址有效?
感谢。
答案 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";
}
答案 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,
]);
}