Regex 如何评估IP?

Regex 如何评估IP?,regex,validation,language-agnostic,ip-address,Regex,Validation,Language Agnostic,Ip Address,如何确定字符串是否为IP地址?IPv4还是IPv6 最少和最多的字符数是多少 我假设这是一个正则表达式的回答。对于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之间。由于该正则表达式的一半处理最后一个段末尾没有句点的事实,因此如果在可能的IP地址末尾加上“.”

如何确定字符串是否为IP地址?IPv4还是IPv6

最少和最多的字符数是多少


我假设这是一个正则表达式的回答。

对于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之间。

由于该正则表达式的一半处理最后一个段末尾没有句点的事实,因此如果在可能的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)
}

@unsliced这是正确的,但是它当然取决于实现,如果您正在解析来自访问您的站点的用户的IP,那么您可以使用regex,因为它应该是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它要复杂得多,根据wikipedia的说法,以下所有示例在技术上都是正确的,但是上面的正则表达式只能捕获带有*

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

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

例如:

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

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

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

他基本上主张使用正则表达式来实现他们擅长的功能:解析出标记。然后评估结果。他的例子是:

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;
}
函数isDottedIPv4(s)
{
var match=s.match(/^(\d+)\(\d+)\(\d+)\(\d+)\(\d+$/);
返回匹配!=null&&

匹配[1]IPv4变为:
/\d\d?\d\d?\d?\d?\d?\d?\d?\d?\d?/


我不确定IPv6规则。

我在各种输入上测试了它。似乎是防弹的。