Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Является ли регулярное выражение хорошим способом проверить URL-адрес

Автор вопроса: BermingОтветов: 8

Я пытаюсь проверить правильность URL-адреса, введенного с помощью php5. Я думал об использовании регулярного выражения, но предполагая, что оно все время работает правильно, оно решает только проблему синтаксической корректности URL-адреса. Это ничего не говорит мне о том, что URL-адрес правильный или работает.

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

Если регулярное выражение - это путь, какие проверенные регулярные выражения существуют для URL-адресов?

  • даже проверка того, существует ли URL-адрес сейчас, не означает, что он будет существовать, когда вы захотите отобразить/использовать его позже. scunliffe 04.08.2010
  • Почему вы проверяете, действителен ли URL-адрес? Как правило, как веб-разработчик, разве вы не знаете заранее, что URL-адрес действителен? В большинстве CMS или других системах действительными URL-адресами являются либо файлы, либо записи базы данных, но проверка этого полностью зависит от вашей настройки. Некоторая дополнительная информация поможет вам ответить, конкретно о вашем затруднительном положении. Owen Allen 04.08.2010
  • Возможно, это слишком мягко для того, что вы хотите сделать, но взгляните на php. net/manual/en/function.parse-url.php Pekka 04.08.2010
  • У вас будут только URL-адреса HTTP для проверки? Gordon 05.08.2010

urlphpregex

Ответы

Ответ 1 · рейтинг 11 · BoltClock

Вместо того, чтобы ломать голову над регулярным выражением (URL-адреса очень сложны), я просто использую filter_var(), а затем попытайтесь пропинговать URL-адрес, используя cURL а>:

if (filter_var($url, FILTER_VALIDATE_URL) !== false)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_exec($ch);
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($status_code >= 200 && $status_code < 400)
    {
        echo 'URL is valid!';
    }
}

Ответ 2 · рейтинг 3 · Mchl

Для проверки http://www.php.net/manual/en/filter.filters.validate.php

Чтобы проверить, существует ли он... ну, вам нужно попытаться получить к нему доступ на самом деле.

Ответ 3 · рейтинг 2 · brabster

Чтобы проверить, является ли URL-адрес "правильным или рабочим", вам нужно будет попробовать взаимодействовать с ним (например, как это делает веб-браузер).

Я бы порекомендовал HTTP-библиотеку для Perl, например LWP. ::Просто сделать это.

Ответ 4 · рейтинг 2 · Conrad Frix

RegExLib - хорошее место для выражений Reg Ex

http://www.regexlib.com/Search.aspx?k=URL

Ответ 5 · рейтинг 1 · NikiC

Что бы я сделал:

  1. Убедитесь, что URL-адрес действителен, используя очень открытое регулярное выражение или filer_var с FILTER_VALIDATE_URL.
  2. Сделайте file_get_contents в URL-адресе и убедитесь, что $http_response_header[0] содержит HTTP-ответ 200.

Теперь, это грязно, конечно, есть более элегантная версия, использующая завиток и прочее.

Ответ 7 · рейтинг 1 · lando

я бы использовал регулярное выражение, чтобы решить эту проблему, и я ненавижу регулярное выражение. Однако этот инструмент делает мою жизнь намного проще... проверьте его >> http://gskinner.com/RegExr/

Ответ 8 · рейтинг 1 · resmo

Пинговать URL-адрес, чтобы проверить, является ли он действительным URL-адресом, - это нонсенс!

  • Что делать, если хост не работает?
  • Что делать, если домен не пингуется?

Если вы действительно хотите провести "живое" тестирование, попробуйте разрешить URL-адрес с помощью DSN. DNS более надежен, чем PING или HTTP.

<?php
$ip = gethostbyname('www.example.com');

echo $ip;
?>

Но даже если это не удается, URL-адрес может быть действительным. У него просто нет записи DNS. Так что это зависит от ваших потребностей.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы