在PHP中验证URL的最简单,最一致的方法是使用。 filter_var()
这是一个例子:
$url = "http://whileifblog.com"; if (filter_var($url, FILTER_VALIDATE_URL)) { echo "URL is valid"; } else { echo "URL is invalid"; }
这种方法的唯一问题是它有一些警告。PHP filter_var函数仅自PHP 5.2起可用。如果您运行的PHP版本早于5.2,那么您就不走运了。
PHP 5.2.13和PHP 5.3.2中还存在一个错误,该错误不允许使用破折号的URL进行验证。如果不确定您的PHP版本,可以在安装了命令行PHP的情况下从命令行运行php -v,或者创建包含以下内容的PHP文件并使用网络浏览器导航至该文件:
phpinfo();
由于的限制filter_var(),您可能不得不退回到使用正则表达式。这是一个允许在URL中使用破折号的正则表达式的示例:
$url = "http://whileifblog.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"; }
关于在进行URL验证时使用正则表达式是否是一个好主意,存在很多争议。如果您不确定并正在寻找指南,那么这可能会有所帮助:
如果您使用的是PHP的版本比PHP 5.2以上:
-使用正则表达式的方法
如果你正在使用PHP 5.2.13或PHP 5.3.2和需要的网址,用破折号来验证:
-使用正则表达式的方法
。如果你不要属于以下类别之一:
–使用filter_var()方法
有些人抱怨说使用PHPfilter_var()函数太宽松了,并允许不应验证的URL。一种解决方案是使用filter_var进行初始验证,然后在原始filter_var验证通过的情况下执行其他验证检查。