有没有办法使用php检测字符串是否是Ip或域,例如下面。
$string = "http://192.168.0.0";
$string = "http://example.com";
因此,如果字符串是IP,那么如果脚本/函数将其检测为域,它将执行某些操作,它将执行其他操作。
谢谢
答案 0 :(得分:8)
您可以像这样测试它:
$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']);
答案 1 :(得分: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中使用正则表达式:
答案 2 :(得分:1)
您也可以比较HTTP_HOST和SERVER_ADDR。 对于IP v6,您还应修剪HTTP_HOST上的方括号。
$isIP = @($_SERVER['SERVER_ADDR'] === trim($_SERVER['HTTP_HOST'], '[]'));
似乎比正则表达式更有效,但不确定ip2long aproach是否会更有效。
答案 3 :(得分:0)
您在SO问题上有正则表达式:Regular expression to match DNS hostname or IP Address?
您将需要使用PHP函数:preg_match