正则表达式匹配IP地址

时间:2011-05-03 06:21:07

标签: php regex string ip preg-match

我是regex的新手,我想使用preg_match函数来查找字符串是否是IP地址。

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

3 个答案:

答案 0 :(得分:117)

当您不需要时,请不要使用正则表达式:)

$valid = filter_var($string, FILTER_VALIDATE_IP);

虽然你确实想要一个正则表达式......

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

然而,正则表达式只会验证格式,任何八位字节的最大值是无符号字节的最大值,或255

这就是为什么需要IPv6的原因 - 一个IPv4地址只有32位长,互联网很受欢迎:)

答案 1 :(得分:9)

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

应该针对您的示例(其中包含 IP地址的字符串)。当然,它只是一个IPv4地址。

答案 2 :(得分:5)

/^(?:(?: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中的任何一个。