有沒有辦法檢測一個字符串是一個IP或域使用PHP,下面的例子。PHP如果IP或域檢測功能
$string = "http://192.168.0.0";
$string = "http://example.com";
因此,如果字符串是IP,如果它檢測到它的域名會做別的事情的腳本/函數會做一些事情。
謝謝
有沒有辦法檢測一個字符串是一個IP或域使用PHP,下面的例子。PHP如果IP或域檢測功能
$string = "http://192.168.0.0";
$string = "http://example.com";
因此,如果字符串是IP,如果它檢測到它的域名會做別的事情的腳本/函數會做一些事情。
謝謝
你可以簡單地測試它像這樣:
$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']);
你對此SO問題的正則表達式:Regular expression to match DNS hostname or IP Address?
你會需要使用PHP函數:preg_match
您可以使用正則表達式。
在這裏你可以找到例子:
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中使用正則表達式:
您可能還比較HTTP_HOST和SERVER_ADDR。 對於IP v6,您還應該修剪HTTP_HOST上的方括號。
$isIP = @($_SERVER['SERVER_ADDR'] === trim($_SERVER['HTTP_HOST'], '[]'));
似乎比正則表達式更有效,但不知道ip2long aproach是否會更有效。
這通常使用正則表達式完成。您會在Google上找到數百萬個示例。 – arkascha