IPAddress.TryParse的有趣行为

时间:2015-06-01 07:38:26

标签: 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地址上失败。

我不知道如何才能让它发挥作用?

3 个答案:

答案 0 :(得分:4)

快速猜测:

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

请尝试if (IPAddress.TryParse("192.168.1.9", out ip))

答案 1 :(得分:0)

你的最后一部分以0开头,以零开头的四边形必须被视为基数8(八进制)数,因此例如任何以零开头且包含数字8或9的四边形部分不是有效。如果你尝试“192.168.018.110”..这也将失败..请看下面你的评论问题

答案 2 :(得分:0)

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

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