[英]php preg_match, not working for validating URL's
我有一個PHP preg_match正則表達式是:
#^(http:\/\/|https:\/\/|www\.|//)*(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d{1,5}))?([A-Z0-9_-]|\.|\/|\?|\#|=|&|%)*$#i
問題是當我嘗試匹配任何以.com &&結尾的URL時,它返回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**
打開頁面/url.php?url=http://www.google.com**
它返回false。 如果我以/url.php?url=http://www.google.com&&
打開頁面,則返回true,但由於.com &&不是有效的TLD,它應該返回false。
最后一點
([A-Z0-9_-]|\.|\/|\?|\#|=|&|%)*
是匹配“&”號的東西。 您可能想做的是,如果有查詢字符串,則需要帶前綴的問號:
(\?([A-Z0-9_-]|\.|\/|\?|\#|=|&|%)*)?
但是,在PHP 5.2+中有一種更好的方法:
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.