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