Я реорганизую свой код и хочу использовать метод 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;
}
Мой unit test теперь терпит неудачу, потому что эти входные значения возвращают 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
).
Любая помощь наиболее ценится.