正则表达式确定,如果给出IPv6或IPv4以及端口

时间:2013-10-09 14:42:53

标签: php regex ipv6 ipv4

我正在搜索一个正则表达式,如果给定的 IP地址IPv4IPv6,并且(对我来说最重要的话)是一个端口号附加或不附加。

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

1 个答案:

答案 0 :(得分: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

请记住the standard defines要通过将IP文字括在方括号内来区分IPv6主机。