0

我正在寻找一个正则表达式,它可以确定给定的IP 地址是否是IPv4IPv6(对我来说最重要)是否附加了端口号。

我尝试了一些正则表达式,但没有一个按预期工作。

4

1 回答 1

1

如果我可以假设输入将是一个简单的有效 IP 地址,而您只是想知道您是否有端口,您可以执行以下操作:

if (preg_match("/^(?:[0-9.]+|(?:\[[0-9a-fA-F:]+\]))(:[0-9]+)$/", $ip)) 
{
    echo "A port was found.";
} 
else 
{
    echo "A port was not found.";
}

这将匹配一个IP地址,如

  • [2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:8080或者
  • 127.0.0.1:8080

但它不会匹配

  • 2001:0db8:85a3:08d3:1319:8a2e:0370:7344或者
  • 127.0.0.1

请记住,该标准定义了通过将 IP 文字括在方括号中来区分的 IPv6 主机。

于 2013-10-09T16:10:44.140 回答