У меня есть регулярное выражение 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
Проблема в том, что когда я пытаюсь сопоставить любой 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**
, она возвращает ложь.Если я открываю страницу как /url.php?url=http://www.google.com&&
, она возвращает true, но должна возвращать false, поскольку .com && не является действительным TLD.