这是验证发布网址的好方法吗?
if (filter_var($_POST['url'], FILTER_VALIDATE_URL)){
echo "valid url";
}else{
echo "invalid url";
}
这是我开始写的内容,因为我可以用它显示多条错误消息:
function validateURL($url)
{
$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';
return preg_match($pattern, $url);
}
$result = validateURL($_POST['url']);
if ($result == "1"){
$scheme = parse_url($_POST['url'], PHP_URL_SCHEME);
if (isset($scheme)){
echo $scheme . "://" . parse_url($_POST['url'], PHP_URL_HOST);
}else{
echo "error you did not enter http://";
}
}else{
echo "your url is not a valid format";
}
答案 0 :(得分:1)
我只是去内置FILTER_VALIDATE_URL
并使用如下的一般错误消息:
网址无效。请记得同时输入
http://
。
如果你很好,你可以检查前7/8个字母是http://
还是https://
,如果没有,可以预先添加。
如果问题已经解决,那么你应该进入并维护这样一个RegEx。除非您正在解释URL格式,否则通常也不需要在错误消息中更详细。
答案 1 :(得分:1)
答案 2 :(得分:0)
我认为简单
filter_var($var, FILTER_VALIDATE_URL)
并通过strpos()检查协议就足够了,因为如果想要,用户可以给你错误的(不存在的)url。
当然,您可以检查域是否存在并返回有效的http状态,但我认为这有点夸大其词。