php - 检查给定值是域还是URL

时间:2014-02-24 17:38:26

标签: php regex url

如何检查用户给定的值是url还是域名?

示例:

    $a = array('http://domain.com/page/ex.html',
    'http://domain.com/',
    'domain.com'
    );

foreach ($a as $v) {

if ($v is url)
// do something
} elseif ($v is domain) {
// do another thing
}

}

我应该怎么做才能检查$v值是网址还是域名?

5 个答案:

答案 0 :(得分:2)

使用filter_var($, FILTER_VALIDATE_URL)来测试网址。要测试域,您可以执行表面容易出错的正则表达式,如preg_match('~^[a-z0-9][a-z0-9\.-]*\.[a-z]+$~i', $);,也可以编写一个正确的函数来检查连续点,正确的gtld,验证长度等等。

答案 1 :(得分:2)

使用parse_url

http://us.php.net/parse_url

foreach ($a as $v) {
   $url = parse_url($v);
   if (isset($url['host']) && $url['host'] != '') {
       // valid host
   }
}

答案 2 :(得分:0)

好吧,你应该使用正则表达式。查看this post from Daring Fireball

答案 3 :(得分:0)

您可以使用正则表达式

示例:live

        $domainRegex = '/^[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$/';
        $urlRegex = '/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/';
        $a = array('http://domain.com/page/ex.html',
            'http://domain.com/',
            'domain.com'
        );

        foreach ($a as $v) {

            if (preg_match($urlRegex, $v)) {
                echo $v.': url<br/>';
            } else if (preg_match($domainRegex, $v)) {
                echo  $v.': domain<br/>';
            }
        }

输出应为:

http://domain.com/page/ex.html: url
http://domain.com/: url
domain.com: domain

答案 4 :(得分:0)

嗯,不确定您对域名和网址的定义是什么。从示例中,我猜如果任何字符串包含/,那么它是一个URL。

if(preg_match("|/|i", $v)){
    print "url\n";
}

没有正则表达式:

if(strpos($v, "/")){
    print "url\n";
}