正则表达式是测试网址的好方法

时间:2010-08-04 18:56:37

标签: php regex url

我正在尝试测试用php5输入的网址的有效性。我想过使用正则表达式,但假设它一直正常工作,它只解决了url在语法上有效的问题。它没有告诉我任何有关网址正确或有效的信息。

如果可能的话,我正在尝试找到另外两种解决方案。或者为此找到2个独立的解决方案更好?

如果要使用正则表达式,那么为网址存在测试正则表达式的内容吗?

8 个答案:

答案 0 :(得分:11)

我只是使用filter_var(),然后尝试使用cURL ping网址,而不是在正则表达式(URL 非常复杂)上崩溃,而不是p>

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!';
    }
}

答案 1 :(得分:3)

进行验证 http://www.php.net/manual/en/filter.filters.validate.php

检查它是否存在......你需要尝试实际访问它。

答案 2 :(得分:2)

为了测试网址是“正确还是正常”,您需要实际尝试与其进行互动(例如,网络浏览器)。

我建议使用Perl的HTTP库,例如LWP::Simple

答案 3 :(得分:2)

RegExLib是Reg Ex表达式的好地方

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

答案 4 :(得分:1)

我会做什么:

  1. 使用非常开放的正则表达式或filer_var FILTER_VALIDATE_URL检查网址是否有效。
  2. 在网址上执行file_get_contents,并检查$http_response_header[0]是否包含200 HTTP resoponse。
  3. 现在,这很脏,确定有一些更优雅的版本使用curl和东西。

答案 5 :(得分:1)

file_exists() manual page上有一堆'检查外部文件存在'功能。

答案 6 :(得分:1)

我会用正则表达式来解决这个问题,我讨厌正则表达式。然而,这个工具让我的生活变得更加轻松......看看&gt;&gt; http://gskinner.com/RegExr/

答案 7 :(得分:1)

Ping一个URL以查看它是否是有效的URL是无稽之谈!

  • 如果主机停机怎么办?
  • 如果域名无法ping通怎么办?

如果您真的想进行“实时”测试,最好尝试使用DSN解析网址。 DNS比PING或HTTP更可靠。

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

echo $ip;
?>

但即使失败,网址也可能有效。它只是没有DNS条目。所以这取决于你的需求。