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

Posted

技术标签:

【中文标题】正则表达式匹配 IP 地址 [关闭]【英文标题】:Regex to match an IP address [closed] 【发布时间】:2011-08-17 11:21:15 【问题描述】:

我是正则表达式的新手,我想使用 preg_match 函数来查找字符串是否为 IP 地址。

例如,

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

应该返回真。那么,$regex 应该是什么?

【问题讨论】:

您是否先尝试了 Google? regular-expressions.info/regexbuddy/ipaccurate.html 45.56.78.888 不是 IP 地址。 @bazmegakapa 是的,我刚刚意识到,我是随机写的:D 但我认为你明白了;) Regular expression to match hostname or IP Address?的可能重复 Validating IPv4 addresses with regexp 【参考方案1】:

当你不需要时不要使用正则表达式:)

$valid = filter_var($string, FILTER_VALIDATE_IP);

如果你真的想要一个正则表达式...

$valid = preg_match('/^\d1,3\.\d1,3\.\d1,3\.\d1,3\z/', $string);

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

这就是为什么需要 IPv6 的原因 - IPv4 地址只有 32 位长,而且互联网很流行 :)

【讨论】:

filter_var 是否适用于 ::1 作为 IP? 对于良好的 IP 正则表达式 > ***.com/questions/9165922/regex-for-ip-address/… \b\d1,3\.\d1,3\.\d1,3\.\d1,3\b 或者$valid = (filter_var($string, FILTER_VALIDATE_IP) !== false);,如果你严格想要一个布尔值。 @DesignerGuy 我认为只是在它前面加上 (bool) 会更好。【参考方案2】:
/^\d1,3\.\d1,3\.\d1,3\.\d1,3$/

应该为你的例子做(它包含一个字符串,不是一个IP地址)。当然,它只是一个 IPv4 地址。

【讨论】:

@alex : 那么 999.999.999.999 也将是有效 IP !!?? @PratikCJoshi:最初的问题(在我回答多年后已被编辑)要求一个正则表达式,它可以匹配任何由四个点分隔的数字组成的序列,每个数字最多 3 个字符......跨度> 这很简单,但没有人会想要错误的 IP 地址。请考虑添加有效的 IP 地址正则表达式作为答案。看到人们来到此页面,认为他们会获得 有效 IP 地址的正则表达式,但他们没有获得该正则表达式。谢谢【参考方案3】:
/^(?:(?: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。

【讨论】:

以上是关于正则表达式匹配 IP 地址 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式匹配IP地址

python中利用正则表达式匹配ip地址

正则表达式----------匹配IP地址

正则表达式,匹配IP地址的,求大神帮我解释这行代码。^([1-9][1-9][0-9]1[0-

python_正则表达式匹配ip

PHP正则表达式匹配IP地址[重复]