正则表达式以匹配IP地址[关闭]

问题描述 投票:43回答:3
我是正则表达式的新手,我想使用preg_match函数查找字符串是否为IP地址。

例如,

$string = "10.0.0.1"; preg_match($regex, $string);

应返回true。那么,$regex应该是什么? 
php regex string ip preg-match
3个回答
120
投票
不需要时不使用正则表达式:)

$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位长,并且互联网很流行:)


9
投票
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
应该为您的示例做(它确实包含IP地址

not的字符串)。当然,这只是一个IPv4地址。


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]?)$/
这将检查完美范围,包括范围是否大于4中的255。
© www.soinside.com 2019 - 2024. All rights reserved.