Проверка URL на валидность (preg_match) в PHP
Нужен был рег для проверки корректности введенного URL. Для примера был взят один отсюда, но немного дописан.
Добавлена возможность принимать урлы с указанием порта, а также разрешено использование в адресе (не домене) символов «()*» (причем это позволено RFC 1738) и кириллицы (да, появилась нужда принимать и обрабатывать такие адреса без предварительного rawurlencode()).
$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...";
@sabotage
по второму пункту не понял….
Кирилические символы в URL разрешены как минимум в зоне .com да и целая доменная зона есть .РФ )))))))
как это не может..зайдите на
http://правительство.рф
@sabotage
За 1 спасибо, со 2 тоже очень согласен, в конце концов вернулся к кодированию строки перед проверкой.
Пару замечаний
1. раз уж есть проверка на .arpa, то на .asia грех не проверять
Рекомендую маску: http://sabotage.name/php-sql/filter_var-vs-regex/
2. русских символов в урле быть не может, это ошибка. правильнее перед проверкой прогонять urlencode и убрать из регулярки русские символы.
а так вообще, неплохое решение