如何评估IP?

时间:2008-09-03 19:22:50

标签: regex language-agnostic validation

如何判断字符串是否为IP地址? IPv4 IPv6

最少和最多的字符是什么?

我认为这将是正则表达式答案。

8 个答案:

答案 0 :(得分:6)

在.NET中,有一种IPAddress类型,它有一个方便的方法TryParse

示例:

if(System.Net.IPAddress.TryParse(PossibleIPAddress, validatedIPAddress)){
    //validatedIPAddress is good
}

// or more simply:
bool IsValidIPAddress(string possibleIP){
    return System.Net.IPAddress.TryParse(PossibleIPAddress, null)
}

答案 1 :(得分:6)

我以前做过这个,但我喜欢Raymond Chen的帖子:

http://blogs.msdn.com/oldnewthing/archive/2006/05/22/603788.aspx

他基本上主张将正则表达式用于他们擅长的东西:解析出令牌。然后评估结果。他的榜样:

function isDottedIPv4(s)
{
 var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
 return match != null &&
        match[1] <= 255 && match[2] <= 255 &&
        match[3] <= 255 && match[4] <= 255;
}

更容易看到它并且理解它应该做什么。

答案 2 :(得分:4)

对于IPv4,您可以使用此正则表达式。

\b(?:(?: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]?)\b

它看起来相当复杂,但它的工作原理是将每个四边形限制为0-255。

答案 3 :(得分:3)

但问题并不像假设a.b.c.d ...... there are way more forms than you realised那么简单。

但这肯定是Google的问题吗?您可以在任何地方找到的每个正则表达式底漆都以IP为例! ipv4 + regex获得183,000次点击!

答案 4 :(得分:0)

由于该正则表达式的一半处理了最后一段在末尾没有句号的事实,如果你点'',你可以把它减半。到你可能的IP地址的末尾。

这样的事情:

bool IsValidIPAddress(string possibleIP){
  CrazyRegex = \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}\b
  return Regex.Match(possibleIP+'.', CrazyRegex)
}

答案 5 :(得分:0)

@unsliced:是的,这个问题可能会有点疯狂。

如果你真的需要处理任何可能的IP地址,那么你必须把更复杂的东西放在一起。

但是,如果您只是想进行基本验证以确保用户输入格式正确的数据,我认为将它们限制为带有上述正则表达式的a.b.c.d模型是公平的。

答案 6 :(得分:0)

@unsliced这是正确的,但它当然将取决于实现,如果您正在从访问您网站的用户解析IP,那么您可以使用正则表达式,因为它应该是x.x.x.x格式。

对于IPv6,您可以使用此

[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}

然而它并没有捕捉到所有内容,因为使用IPv6它要复杂得多,根据维基百科,以下所有示例都是技术上正确的,但上面的正则表达式只会抓住带有*的

2001:0db8:0000:0000:0000:0000:1428:57ab*
2001:0db8:0000:0000:0000::1428:57ab*
2001:0db8:0:0:0:0:1428:57ab*
2001:0db8:0:0::1428:57ab
2001:0db8::1428:57ab
2001:db8::1428:57ab

答案 7 :(得分:-1)

IPv4变为:/\d\d?\d?.\d\d?\d?.\d\d?\d?.\d\d?\d?/

我不确定IPv6规则。