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

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

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

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

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

Вместо того, чтобы взломать голову над регулярным выражением (URL-адреса очень сложны), я просто использую filter_var() , а затем пытаюсь выполнить ping 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!'; } } 

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

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

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

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

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

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

Что я буду делать:

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

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

На странице руководства file_exists() есть куча «проверить, что внешний файл существует».

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

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

  • Что делать, если хост отключен?
  • Что делать, если домен не работает с ping?

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

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

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