我正在重构我的代码,想要使用 IPAddress.TryParse
方法来验证一个字符串是否是有效的IPv4地址,而不是使用正则表达式:
public static bool IsIPv4(string value)
{
IPAddress address;
if (IPAddress.TryParse(value, out address))
{
if (address.AddressFamily == AddressFamily.InterNetwork)
{
return true;
}
}
return false;
}
我的单元测试现在失败了,因为这些输入值返回true
并被解析为以下的IPAddress
对象:
value = "0.0.0.0" -> address = {0.0.0.0}
value = "255.255.255" -> address = {255.255.0.255}
value = "65536" -> address = {0.1.0.0}
这是否有意义?我知道从技术上讲0.0.0.0
是一个有效的IPv4地址,即使对于用户输入来说毫无意义。其他两个呢?它们为什么被转换成这样,即使对于用户来说可能并不透明(比如,用户忘记输入点“.”而输入了65536
而不是6.5.5.36
),我应该将它们视为有效的吗?
非常感谢任何帮助。
http://65536
。 - mellamokb