2011-05-03 96 views
35

我是新手与正则表达式,我想用preg_match函数来查找一个字符串是否是IP地址。正则表达式匹配的IP地址

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

+2

您是否首先尝试Google? http://www.regular-expressions.info/regexbuddy/ipaccurate.html – 2011-05-03 06:28:30

+4

'45.56.78.888'不是IP地址。 – kapa 2011-05-03 06:39:43

+0

@bazmegakapa是的我刚刚意识到,我随机写道:D,但你有我认为的观点;) – ibrahim 2011-05-03 06:54:51

回答

105

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

$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位长,互联网是受欢迎:)

+17

+1'filter_var' – kapa 2011-05-03 06:39:21

+0

filter_var是否适用于:: 1作为IP? – super 2014-06-03 10:11:55

+1

for good IP regex> http://stackoverflow.com/questions/9165922/regex-for-ip-address/20270082#20270082 – Alban 2014-07-28 16:15:30

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

应该为你做例子(其中确实包含一个字符串, IP地址)。当然,这只是一个IPv4地址。

+0

@alex:那么999.999.999.999也是有效的IP那么!! ?? – 2015-12-08 17:57:44

+0

@PratikCJoshi:最初的问题(在我的答案后多年编辑)要求一个正则表达式,它可以匹配任意四个以点号分隔的数字,每个数字最多可包含3个字符... – 2015-12-08 18:25:50

+0

这相当简单,但没有人愿意错误的IP地址。请考虑添加有效的IP地址Regex作为答案。看到有人来到这个页面,考虑到他们会得到正确的** IP地址正则表达式,但他们没有得到这个正则表达式。谢谢 – 2015-12-08 18:29:15

4
/^(?:(?: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.