[英]Url validation with regex for old php version
注意 :我使用的是较早的PHP版本,因此
FILTER_VALIDATE_URL
目前不可用。
经过许多次搜索后,我仍然找不到能够涵盖所有URL结构可能性的确切答案,但最后我将使用这种方式:
我正在使用以下功能
1)获得适当方案的功能
function convertUrl ($url){
$pattern = '#^http[s]?://#i';
if(preg_match($pattern, $url) == 1) { // this url has proper scheme
return $url;
} else {
return 'http://' . $url;
}
}
2)有条件检查是否为URL
if (preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url)) {
echo "URL is valid";
}else {
echo "URL is invalid<br>";
}
你猜怎么了!? 它非常适合所有这些可能性:
$url = "google.com";
$url = "www.google.com";
$url = "http://google.com";
$url = "http://www.google.com";
$url = "https://google.com";
$url = "https://www.codgoogleekarate.com";
$url = "subdomain.google.com";
$url = "https://subdomain.google.com";
但是仍然有这种情况
$url = "blahblahblahblah";
函数convertUrl($url)
会将其转换为$url = "http://blahblahblahblah";
那么正则表达式会认为它是有效URL,而实际上不是!
我如何编辑它,以便它不会传递具有此结构的URL http://blahblahblahblah
如果要验证 ,请在正则添加检查点是否包含点(。)字符。
Note: http://blahblahblah is a valid url as is http://localhost
尝试这个:
if (preg_match("/^(([\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})*)?$/", $url)) {
echo "URL is valid";
}else {
echo "URL is invalid<br>";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.