Проверка 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})[email protected])?)?(?:(?:[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.,[email protected]%\(\)\*&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~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, она только разбивает его

  9. Charleshat
    16.03.2019 - 19:28

    hOur company provides a wide variety of non prescription products. Take a look at our health website in case you want to to feel healthier with a help health products. Our company provides a wide variety of weight loss products. Take a look at our health contributing site in case you want to feel healthier. Our company provides supreme quality pharmacy. Visit our health contributing website in case you want to improve your health. Our company offers a wide variety of non prescription products. Look at our health portal in case you want to feel better with a help of generic supplements. Our company offers herbal health products. Visit our health contributing website in case you want to feel better. Our company provides health products. Look at our health contributing portal in case you want to feel better.
    Our company offers herb-based health products. Take a look at our health contributing portal in case you want to look better. Our company provides generic pharmacy. Look at our health contributing site in case you want to improve your health. Our company offers supreme quality general health products. Take a look at our health contributing website in case you want to strengthen your health. Our company offers herb-based weight loss products. Visit our health contributing website in case you want to look better. Our company offers a wide variety of non prescription products. Visit our health portal.

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

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

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