繁体   English   中英

使用正则表达式对旧php版本进行网址验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM