Reputation:
I'm searching for a regular expression that can determine, if the given IP address is IPv4
or IPv6
and (most important for me) if a port number is attached, or not.
I tried a few regular expressions, but none of them worked as expected.
Upvotes: 0
Views: 2494
Reputation: 318
If I can assume that the input will be a simple valid IP address and you simply want to know whether you have a port or not, you could do the following:
if (preg_match("/^(?:[0-9.]+|(?:\[[0-9a-fA-F:]+\]))(:[0-9]+)$/", $ip))
{
echo "A port was found.";
}
else
{
echo "A port was not found.";
}
This will match an IP adress like
[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:8080
or127.0.0.1:8080
but it will not match
2001:0db8:85a3:08d3:1319:8a2e:0370:7344
or127.0.0.1
Keep in mind that the standard defines an IPv6 host to be distinguished by enclosing the IP literal within square brackets.
Upvotes: 2