Проверка 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}

Share

Comments

  1. Пару замечаний
    1. раз уж есть проверка на .arpa, то на .asia грех не проверять
    Рекомендую маску: http://sabotage.name/php-sql/filter_var-vs-regex/

    2. русских символов в урле быть не может, это ошибка. правильнее перед проверкой прогонять urlencode и убрать из регулярки русские символы.

    а так вообще, неплохое решение

  2. Петька Сокольников
    16.05.2010 - 21:06

    @sabotage
    За 1 спасибо, со 2 тоже очень согласен, в конце концов вернулся к кодированию строки перед проверкой.

  3. sabotage :
    Пару замечаний

    2. русских символов в урле быть не может, это ошибка. правильнее перед проверкой прогонять urlencode и убрать из регулярки русские символы.

    как это не может..зайдите на
    http://правительство.рф

  4. Владимир
    02.07.2010 - 13:09

    @sabotage
    по второму пункту не понял….
    Кирилические символы в URL разрешены как минимум в зоне .com да и целая доменная зона есть .РФ )))))))

  5. А вы пробовали проверять url http://правительство.рф ? У меня выдает «Incorrect…»

  6. а не подскажите регулярку, способную отдать из урла вида http://site.com/i/img.gif только /i/img/gif? или без первого слеша?

  7. Go Mid Rak
    01.02.2013 - 19:29

    admin :
    Зачем регулярку? Для этого есть php-функция parse_url().

    parse_url в BBCode не работает

  8. parse_url Эта функция не предназначена для проверки на корректность данного URL, она только разбивает его

Добавить комментарий

Your email address will not be published / Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.