正则expression式来匹配一个IP地址

我是正则expression式的新手,我想用preg_match函数来查找一个string是否是一个IP地址。

例如,如果$string = "45.56.78.222"或类似的东西, preg_match($regex, $string)应该返回true。 那么, $regex应该是什么?

当你不需要的时候不要使用正则expression式:)

 $valid = filter_var($string, FILTER_VALIDATE_IP); 

虽然如果你真的想要一个正则expression式…

 $valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string); 

然而,正则expression式只会validation格式,任何字节的最大值是无符号字节的最大值,即255

这就是为什么IPv6是必要的 – 一个IPv4地址只有32位长,互联网是stream行的:)

 /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ 

应该为你的例子做(其中包含一个不是 IP地址的string)。 当然,这只是一个IPv4地址。

 /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ 

这将检查完美范围,包括范围是否高于255从任何4。