Проверьте IPv4-адрес в Java - PullRequest
       2

Проверьте IPv4-адрес в Java

55 голосов
/ 14 апреля 2011

Я хочу проверить адрес IPv4 с помощью Java. Он должен быть записан с использованием десятичной записи , поэтому он должен иметь 3 точки ("."), без символов, цифры между точками и цифры должны находиться в допустимом диапазоне. Как это сделать?

Ответы [ 17 ]

86 голосов
/ 14 апреля 2011

Довольно просто с Regular Expression (но обратите внимание, что это гораздо менее эффективно и намного сложнее для чтения, чем ответ worpet, использующий утилиту Apache Commons) *

private static final Pattern PATTERN = Pattern.compile(
        "^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");

public static boolean validate(final String ip) {
    return PATTERN.matcher(ip).matches();
}

На основе сообщения Mkyong

50 голосов
/ 15 апреля 2011

Попробуйте использовать служебный класс InetAddressValidator.

Документы здесь:

http://commons.apache.org/validator/apidocs/org/apache/commons/validator/routines/InetAddressValidator.html

Скачать здесь:

http://commons.apache.org/validator/

20 голосов
/ 16 мая 2014

Использование Гуава 's

InetAddresses.isInetAddress(ipStr)
9 голосов
/ 14 апреля 2011

Вы можете использовать регулярные выражения, например:

(([0-1]?[0-9]{1,2}\.)|(2[0-4][0-9]\.)|(25[0-5]\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))

Это проверяет, что значения находятся в пределах диапазона.

Android имеет поддержку регулярных выражений.См. java.util.regex.Pattern .

class ValidateIPV4
{

   static private final String IPV4_REGEX = "(([0-1]?[0-9]{1,2}\\.)|(2[0-4][0-9]\\.)|(25[0-5]\\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))";
   static private Pattern IPV4_PATTERN = Pattern.compile(IPV4_REGEX);

   public static boolean isValidIPV4(final String s)
   {          
      return IPV4_PATTERN.matcher(s).matches();
   }
}

Чтобы избежать перекомпиляции шаблона снова и снова, лучше всего выполнить вызов Pattern.compile(), чтобы он выполнялся только один раз.

8 голосов
/ 07 июня 2015

Вы можете использовать эту функцию -

public static boolean validate(final String ip) {
    String PATTERN = "^((0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)\\.){3}(0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)$";

    return ip.matches(PATTERN);
}
7 голосов
/ 24 марта 2014

Существует также недокументированный класс утилит sun.net.util.IPAddressUtil, который на самом деле не следует использовать , хотя это может быть полезно в быстрой одноразовой утилите:

boolean isIP = IPAddressUtil.isIPv4LiteralAddress(ipAddressString);

Внутренне, это служебный класс InetAddress, используемый для разбора IP-адресов.

Обратите внимание, что это вернет true для строк типа "123", которые, технически, являются действительными адресами IPv4 , но не в десятичном формате.

3 голосов
/ 12 сентября 2015

Это для Android, тестирование на IPv4 и IPv6

Примечание: обычно используемый InetAddressUtils устарел.Используйте новые InetAddress классы

public static Boolean isIPv4Address(String address) {
    if (address.isEmpty()) {
        return false;
    }
    try {
        Object res = InetAddress.getByName(address);
        return res instanceof Inet4Address || res instanceof Inet6Address
    } catch (final UnknownHostException ex) {
        return false;
    }
}
2 голосов
/ 17 октября 2016

Java-библиотека IPAddress сделает это. Javadoc доступен по ссылке. Отказ от ответственности: я менеджер проекта.

Эта библиотека прозрачно поддерживает IPv4 и IPv6, поэтому проверка либо работает так же, как показано ниже, а также поддерживает подсети CIDR.

Убедитесь, что адрес действителен

    String str = "1.2.3.4";
    IPAddressString addrString = new IPAddressString(str);
    try {
         IPAddress addr = addrString.toAddress();
         ...
    } catch(AddressStringException e) {
        //e.getMessage provides validation issue
    }
2 голосов
/ 14 апреля 2011

Если это IP4, вы можете использовать регулярное выражение следующим образом:

^(2[0-5][0-5])|(1\\d\\d)|([1-9]?\\d)\\.){3}(2[0-5][0-5])|(1\\d\\d)|([1-9]?\\d)$.

1 голос
/ 14 апреля 2011

Напишите подходящее регулярное выражение и сравните его с этим. JVM полностью поддерживает регулярные выражения.

...