Толик Панков
hex_laden
............ .................. ................
October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Проверка валидности введенного IP-адреса (V4)

Без использования регулярных выражений.

Пишет мне один старый товарищ, ныне студент, и просит регулярку для проверки валидности IP. Как выяснилось, регулярка оказалась не нужна совсем, т.к. задача поиска IP в тексте неизвестной структуры не стояла. А что такое IP? Да это же просто 4 байта, разделенных точкой. Посему достаточно просто разложить строку на составляющие функцией split(), проверить, сколько строк получилось в результате, и если строк 4 - попытаться каждую сконвертировать в байт. Если все сконвертировались - IP правильный.

bool isValidIP(string IPAddress)
{
     char[] ch = new char[1]; //Разделители для функции split
     ch[0] = '.'; //у нас 1 - точка

     string[] IPArr = IPAddress.Split(ch); //разделяем строку на составляющие и записываем в массив

     if (IPArr.Length != 4) return false; //если длина не 4 ровно, значит точно не IP
          byte b = 0; //временная переменная для результата конверсии
          bool res = false;//временная переменная флага, прошла ли конверсия удачно

          for (int i = 0; i < 4; i++) //прогоняем все элементы массива через конверсию
          {
               res = byte.TryParse(IPArr[i], out b); //пытаемся сконвертировать
               if (!res) return false; //если функция вернула false, значит элемент массива не байт. Возвращаем false
          }

     return true; //если до этого нигде не вывалились, это IP, возвращаем true
}

Вариант проверки с использованием класса Convert и обработкой исключений:

bool isValidIP2(string IPAddress)
{
     char[] ch = new char[1]; //Разделители для функции split
     ch[0] = '.'; //у нас 1 - точка

     string[] IPArr = IPAddress.Split(ch); //разделяем строку на составляющие и записываем в массив

     if (IPArr.Length != 4) return false; //если длина не 4 ровно, значит точно не IP

     byte b = 0; //временная переменная для результата конверсии

     for (int i = 0; i < 4; i++) //прогоняем все элементы массива через конверсию
     {
          try
          {
               b = Convert.ToByte(IPArr[i]); //пытаемся сконвертировать
          }
          catch
          {
               return false; //если исключение - возвращаем false
          }
     }

     return true; //если до этого нигде не вывалились, это IP, возвращаем true
}


Вариант 1 на pastebin
Вариант 2 на pastebin
демо
static class с функциями отдельно

From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.