Проверка URL на валидность (preg_match) в PHP
Нужен был рег для проверки корректности введенного URL. Для примера был взят один отсюда, но немного дописан.
Добавлена возможность принимать урлы с указанием порта, а также разрешено использование в адресе (не домене) символов «()*» (причем это позволено RFC 1738) и кириллицы (да, появилась нужда принимать и обрабатывать такие адреса без предварительного rawurlencode()).
{code type=PHP}
$file_now = "http://www.domain.net.ua:8080/48649c6575cab899e6841aea6563e72a/down/3878/Abcde(FGH*).avi#dfbdf-dfb";
if (preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(:[0-9]{1,5})?(?:/[а-яa-z0-9.,_@%\(\)\*&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i", $file_now))
print "Correct!";
else print "Incorrect...";
{/code}
sabotage
14.05.2010 - 14:08
Пару замечаний
1. раз уж есть проверка на .arpa, то на .asia грех не проверять
Рекомендую маску: http://sabotage.name/php-sql/filter_var-vs-regex/
2. русских символов в урле быть не может, это ошибка. правильнее перед проверкой прогонять urlencode и убрать из регулярки русские символы.
а так вообще, неплохое решение
Петька Сокольников
16.05.2010 - 21:06
@sabotage
За 1 спасибо, со 2 тоже очень согласен, в конце концов вернулся к кодированию строки перед проверкой.
Eduard
08.06.2010 - 22:51
как это не может..зайдите на
http://правительство.рф
Владимир
02.07.2010 - 13:09
@sabotage
по второму пункту не понял….
Кирилические символы в URL разрешены как минимум в зоне .com да и целая доменная зона есть .РФ )))))))
pepsikat
12.07.2012 - 09:17
А вы пробовали проверять url http://правительство.рф ? У меня выдает «Incorrect…»
4enki
04.08.2012 - 12:09
а не подскажите регулярку, способную отдать из урла вида http://site.com/i/img.gif только /i/img/gif? или без первого слеша?
admin
14.12.2012 - 21:22
Зачем регулярку? Для этого есть php-функция parse_url().
Go Mid Rak
01.02.2013 - 19:29
parse_url в BBCode не работает
tomalko
19.12.2013 - 15:48
parse_url Эта функция не предназначена для проверки на корректность данного URL, она только разбивает его