2014-02-24 60 views
2

如何檢查給定值的用戶是url還是域?php - 檢查給定的值是域還是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值是否是URL或域名?

+3

傳遞字符串到[parse_url(http://www.php.net/parse_url),檢查哪些部分是這樣。 –

回答

2

使用filter_var($, FILTER_VALIDATE_URL)來測試URL。要測試域,你可以做一個表面的容易出錯的正則表達式,比如preg_match('~^[a-z0-9][a-z0-9\.-]*\.[a-z]+$~i', $);,或者寫一個適當的函數來檢查連續的點,合適的gtld,驗證長度等等。

0

您可以使用正則表達式,

例子:live

 $domainRegex = '/^[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$/'; 
     $urlRegex = '/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[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 
+0

'test.x123_xx.com.abdd-ddd.de' - 是一個有效的域,你的正則表達式不起作用。我不會使用正則表達式,當有本地PHP函數做這個工作更可靠.. – DanFromGermany

+0

只要使http可選,它的工作原理,我只是給了一個選項。 –

+1

歡迎您!只是說其他方式更可靠的國際海事組織。我剛剛閱讀下劃線是*不*一個有效的字符在一個域中,一些網站提供它......不知道這個反正。和平 – DanFromGermany

0

那麼,不知道你的域和網址的定義是什麼。從示例中,我猜如果任何字符串包含/那麼它的URL。

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

沒有正則表達式:

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

'http:// example.com'也是一個域,不是?包含/ – 2014-02-24 17:58:27

+0

@vlzvl根據我的回答,它包含'/'的URL。 –

相關問題