Главная > Tutorials > Проверка URL на валидность (preg_match) в PHP

Проверка 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...";

Categories: Tutorials Tags: ,
  1. 2 Июль 2010 в 13:09 | #1

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

  2. Eduard
    8 Июнь 2010 в 22:51 | #2

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

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

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

  3. 16 Май 2010 в 21:06 | #3

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

  4. 14 Май 2010 в 14:08 | #4

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

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

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

  1. Пока что нет уведомлений.