正则表达式匹配 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.html45.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 地址 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章