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

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

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

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

Ответы [ 8 ]

11 голосов
/ 04 августа 2010

Вместо того, чтобы ломать голову над регулярным выражением (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!';
    }
}
3 голосов
/ 04 августа 2010

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

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

2 голосов
/ 04 августа 2010

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

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

2 голосов
/ 04 августа 2010

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

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

1 голос
/ 05 августа 2010

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

  • Что если хост не работает?
  • Что, если домен не поддерживает ping?

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

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

echo $ip;
?>

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

1 голос
/ 05 августа 2010

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

1 голос
/ 05 августа 2010

На странице справочника file_exists() .

имеется множество функций «проверить, существует ли внешний файл».
1 голос
/ 04 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...