регулярные выражения: проверка ip на корректность

Существует, казалось бы, тривиальная задача: с помощью регулярного выражения проверить корректность введённого ip. На ум приходят сразу 2 варианта:
Правда, оба не лишены недостатков. Каких? Для начала определим, что есть ip? Это некий уникальный адрес узла в сети, по которому можно однозначно идентифицировать данный узел. В машинном виде адрес представляет собой обычное 4-байтовое число, что неудобно для записи человеком. Поэтому была принята запись, вида AAA.BBB.CCC.DDD, значения байтов записываются через точку (байт состоит из 8 битов, каждый из которых может принимать значение 0 или 1. Таким образом, максимально возможное число вариантов 2 8 , чему соответствует 256 разных значений — от 0 до 255 включительно в десятичном виде, или от 00 до FF в шестнадцетиричном). Итого: диапазон всех адресов лежит в пределах 0.0.0.0 и 255.255.255.255.
Если вернуться к написанным выше регулярным выражениям, убеждаемся, что любой из указанных в предыдущем абзаце адресов проверку проходит. Правда, пройдут проверку и 256.256.256.256, и 999.999.999.999 (которые, хотя по структуре и похожи, ip-адресами не являются). Таким образом, нужно как-то ограничить максимальные значения. Однако стоит учесть, что следующий адрес 001.020.130.240 также является корректным (т. к. начальные нули не учитываются). Ну и, наконец, коли уж ip соотоит из 4-ёх чисел в диапазоне 0–255, разделённых точкой, для начала можно составить регулярное выражение для одной секции, после чего повторить его 4 раза. Код секции будет таким:
Если разобрать каждую из возможных частей, получим следующие диапазоны значений:
25[0-5] 250–255 2[0-4][0-9] 200–249 [0-1][0-9] <2>000–199 [0-9] <2>00–99 [0-9] 0–9
Таким образом, данное регулярное выражение описывает все возможные комбинации записи одной секции ip-адреса (одного байта). Полный же код будет таким:
Отсюда можно скопировать готовый код для вставки в скрипт:
Свежим хлебушком типа батон —>
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости продлением домена —>
продлением хостинга на +1 месяц
Проверка IP адреса регуляркой
Пользователь вводит агрумент к скрипту IP адрес, подскажите как при помощи регулярок проверить корректность ввода IP адреса?
![]()
довольно корректное выражение для проверки ipv4-адресов:
чтобы пропускало и адреса, в последнем октете которых написан ноль (см. дискуссию в комментариях), надо переставить последний ? чуть левее:
What regular expression can I use to match an IP address?
The problem: It also matches words (IP) that have more then 4 octets:
How can I match a valid IP and only IP addresses with 4 octets? I can also use Perl – a one line syntax solution, if grep doesn’t work.
![]()
13 Answers 13
which matches all expressions from 0.0.0.0 to 999.999.999.999
you will get IP addresses only
note:
on solaris probably egrep will do the job.
flag to grep makes it only match on word boundaries, meaning that your match must either be surrounded by whitespace or begin / end at the beginning / end of the line!
![]()
To only find matches with 4 octets exactly (excluding things like 1.1.1.1.1) use this:
It should never detect non-IP-addresses. The expression could be more complex to verify more things but this should work for most cases. It will not match a preceding 0 since 010.1.12.1 is not a common way to write IP addresses.
Validate IP address
Задача: для заданной строки верните:
- “IPv4”, если строка является валидным Ipv4 адресом.
- “IPv6”, если строка является валидным Ipv6 адресом.
- “Error”, если не является валидным IP-адресом любого типа.
Входные данные: str — исходная строка содержит только символы английского алфавита, цифры, а также символы ‘.’, ‘:’