2012-10-20 39 views
5

有沒有辦法檢測一個字符串是一個IP或域使用PHP,下面的例子。PHP如果IP或域檢測功能

$string = "http://192.168.0.0"; 
$string = "http://example.com"; 

因此,如果字符串是IP,如果它檢測到它的域名會做別的事情的腳本/函數會做一些事情。

謝謝

+0

這通常使用正則表達式完成。您會在Google上找到數百萬個示例。 – arkascha

回答

5

你可以簡單地測試它像這樣:

$isIP = (bool)ip2long($_SERVER['HTTP_HOST']); 

功能ip2long將返回false是主機並不像域名有效的IP地址。使用ip2long函數的好處是它也驗證提供的IP地址。所以例如地址是4.4.4.756會給你造成錯誤。

所以測試一個給定的字符串,你可以這樣做:

$string = "http://192.168.0.0"; 
$parts = parse_url($string); 
$isIP = (bool)ip2long($parts['host']); 
+0

然而,問題是指給定的字符串持有一個url ... – arkascha

+1

正確,更新,thnak你。 – dfsq

1

您可以使用正則表達式。

在這裏你可以找到例子:

Regular expression to match DNS hostname or IP Address?

代碼/正則表達式模式:

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; 

ValidHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"; 

如何在PHP中使用正則表達式:

preg-match manual at php.net

1

您可能還比較HTTP_HOST和SERVER_ADDR。 對於IP v6,您還應該修剪HTTP_HOST上的方括號。

$isIP = @($_SERVER['SERVER_ADDR'] === trim($_SERVER['HTTP_HOST'], '[]')); 

似乎比正則表達式更有效,但不知道ip2long aproach是否會更有效。