Validate IP address
Published in
2 min readNov 4, 2021
Задача: для заданной строки верните:
- “IPv4”, если строка является валидным Ipv4 адресом.
- “IPv6”, если строка является валидным Ipv6 адресом.
- “Error”, если не является валидным IP-адресом любого типа.
Входные данные: str — исходная строка содержит только символы английского алфавита, цифры, а также символы ‘.’, ‘:’
Справка:
- IPv4-адрес — это IP-адрес в формате «x1.x2.x3.x4», где 0 <= xi <= 255 и xi не может содержать начальные нули.
- IPv6-адрес — это IP-адрес в форме «x1:x2:x3:x4:x5:x6:x7:x8», где 1 <= xi.length <= 4, xi — это шестнадцатеричная строка, которая может содержать цифры, строчные английские буквы (от «a» до «f») и заглавные английские буквы (от «A» до «F»). В xi разрешены ведущие нули.
Примеры:
- «192.168.1.1»
Output: “IPv4” - «192.168.01.1»
Output: “Error” - «2001:0db8:85a3:0000:0000:8a2e:0370:7334»
Output: “IPv6” - «2001:0db8:85a3::8A2E:037j:7334"
Output: “Error”
Разбор
Применяем принцип разделяй и властвуй:
- Разбиваем строку на блоки, разделенные символами ‘.’ или ‘:’.
- Если кол-во блоков равно 4 -> используем функцию для валидации IPv4.
- Если кол-во блоков равно 8 -> используем функцию для валидации IPv6.
- В противном случае, сразу возвращаем сообщение об ошибке.
Функция для валидациия IPv4:
- Каждый из 4х блоков проверяем на валидность.
- Каждый блок должен быть не меньше 1 и не больше 3х символов.
- Каждый блок должен быть числом от 0 до 255, а также не должно быть начальных нулей.
Функция для валидации IPv6:
- Каждый из 8 блоков проверяем на валидность.
- Размер каждого блока должен быть не меньше 1 и не больше 4х символов.
- Каждый блок может содержать цифры [0–9] или буквы [a-f, A-F].
Реализация
Весь код тут:
https://gist.github.com/unilecs/90d9b8a6dd3e4d3041caa60b0b19dad9