2015-06-01 5 views
1

Я использую IPAddress.TryParse для проверки IP- адреса, но если я используюинтересного поведение IPAddress.TryParse

if (IPAddress.TryParse("192.168.1.009", out ip) 

это не удается, но

if (IPAddress.TryParse("192.168.1.007", out ip) 

проходит. В основном, если последняя цифра составляет 8 или 9, она не работает на действительном IP-адресе.

Я не уверен, что делать, чтобы заставить это работать?

+2

это потому, что ваша последняя часть начинаются с '0 'поэтому он будет рассматривать как цифры окта, поэтому значение, имеющее 8 и 9, потерпит неудачу – Sachu

ответ

4

Краткое предположение:

009 и 007 интерпретируются как восьмеричные числа, в то время как 007 является действительным числом в базе-8 и 009 нет.

Попробуйте вместо if (IPAddress.TryParse("192.168.1.9", out ip)).

+0

Хорошо, узнал что-то новое. Спасибо. – HdR

0

Ваша последняя часть начинается с 0. Квадрат, начинающийся с нуля, должен рассматриваться как базовое 8-восьмое число, поэтому, например, любая квадратная часть, начинающаяся с нуля и содержащая цифры 8 или 9, недопустима. если и попробовать «192.168.018.110» .. это также fail..See мой комментарий ниже вас вопрос

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 
Смежные вопросы