0
IHAVE一个PHP的preg_match正则表达式是:PHP的preg_match,不工作的验证URL的
#^(http:\/\/|https:\/\/|www\.|//)*(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d{1,5}))?([A-Z0-9_-]|\.|\/|\?|\#|=|&|%)*$#i
问题是,当我尝试匹配的任何URL以.COM & &,它返回true结束,但如预期它应该返回false,可能会有什么错误呢?
我使用它作为:
function isValidURL($url) {
if (preg_match("#^(http:\/\/|https:\/\/|www\.|//)*(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d{1,5}))?([A-Z0-9_-]|\.|\/|\?|\#|=|&|%)*$#i", $url)) {
return true;
}else{
return false;
}
}
和访问它为:
$URL = $_GET['url'];
echo var_dump(isValidURL($URL));
现在,如果我打开页面/url.php?url=http://www.google.com
返回true,如果我打开页面/url.php?url=http://www.google.com**
返回false 。如果我打开页面/url.php?url=http://www.google.com&&
它将返回true,但它应该返回false,因为.com & &不是有效的TLD。
filter_var不会验证.me域!那是错误! – Ahsan 2012-01-12 09:02:24
@Ahsan:当然,它的确如此:http://codepad.viper-7.com/XBbh3d – hakre 2012-01-12 09:32:09