7

有没有办法使用 php 来检测字符串是 Ip 还是 Domain,例如下面的示例。

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

因此,如果字符串是 IP,则脚本/函数将执行某些操作,如果它将其检测为域,它将执行其他操作。

谢谢

4

4 回答 4

12

您可以像这样简单地测试它:

$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']);
于 2012-10-20T09:41:07.923 回答
2

您还可以比较 HTTP_HOST 和 SERVER_ADDR。对于 IP v6,您还应该修剪 HTTP_HOST 上的方括号。

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

似乎比正则表达式更有效,但不确定 ip2long 方法是否更有效。

于 2017-05-05T12:01:51.740 回答
1

您可以使用正则表达式。

在这里您可以找到示例:

匹配 DNS 主机名或 IP 地址的正则表达式?

代码/正则表达式模式:

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 中使用正则表达式:

php.net 上的预赛手册

于 2012-10-20T09:45:51.617 回答
0

你有关于那个 SO 问题的正则表达式:Regular expression to match DNS hostname or IP Address?

您将需要使用 PHP 函数:preg_match

于 2012-10-20T09:43:08.517 回答