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

от admin

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

проверка 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 адреса?

MaxU - stand with Ukraine's user avatar

довольно корректное выражение для проверки 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.

slhck's user avatar

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!

slhck's user avatar

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 — исходная строка содержит только символы английского алфавита, цифры, а также символы ‘.’, ‘:’

Related Posts