我正在搜索一个正则表达式,如果给定的 IP地址是IPv4
或IPv6
,并且(对我来说最重要的话)是一个端口号附加或不附加。
我尝试了一些正则表达式,但没有一个能按预期工作。
答案 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主机。