C# IPAddress.TryParse的有趣行为

C# IPAddress.TryParse的有趣行为,c#,C#,我正在使用IPAddress.TryParse验证IP地址,但如果使用 if (IPAddress.TryParse("192.168.1.009", out ip) 它失败了,但是 if (IPAddress.TryParse("192.168.1.007", out ip) 通行证。基本上,如果最后一个数字是8或9,则在有效IP地址上失败 我不知道该怎么做才能让它工作?快速猜测: 009和007被解释为八进制数字,而007在base-8中是有效数字,009则不是 尝试if(IPAddre

我正在使用IPAddress.TryParse验证IP地址,但如果使用

if (IPAddress.TryParse("192.168.1.009", out ip)
它失败了,但是

if (IPAddress.TryParse("192.168.1.007", out ip)
通行证。基本上,如果最后一个数字是8或9,则在有效IP地址上失败

我不知道该怎么做才能让它工作?

快速猜测:

009
007
被解释为八进制数字,而
007
在base-8中是有效数字,
009
则不是

尝试
if(IPAddress.TryParse(“192.168.1.9”,out-ip))

快速猜测:

009
007
被解释为八进制数字,而
007
在base-8中是有效数字,
009
则不是


请尝试使用
if(IPAddress.TryParse(“192.168.1.9”,out ip))

您的最后一个部分以
0开头
必须将以零开头的四元组视为基数8(八进制)数,因此,例如,任何以零开头并包含数字8或9的四元组都无效。如果你尝试“192.168.018.110”。这也会失败。请参见下面我的评论,你的问题

你的最后一部分是以
0开头的
以零开头的四元组必须视为基数8(八进制)数,因此,例如,任何以零开头并包含数字8或9的四元组都是无效的。如果您尝试“192.168.018.110”。这也将失败。请参见下面的我的评论,您可以使用正则表达式更改格式:

IPAddress ip;
string ipString = "192.168.1.009";
string goodIpString = Regex.Replace(ipString, @"[0]+(\d+)", "$1");
var res = IPAddress.TryParse(goodIpString, out ip); // true

您可以使用正则表达式更改格式:

IPAddress ip;
string ipString = "192.168.1.009";
string goodIpString = Regex.Replace(ipString, @"[0]+(\d+)", "$1");
var res = IPAddress.TryParse(goodIpString, out ip); // true

这是因为你的最后一部分从<代码> 0 /代码>开始,所以它将被视为八进制数,所以8和9的值将失败,因为你的最后一部分从<代码> 0 /代码>开始,所以它将被视为八进制数,所以8和9的值将失败。