Проверка строки IPv4 в Java - PullRequest
       126

Проверка строки IPv4 в Java

44 голосов
/ 03 января 2011

Сильфонный метод проверяет, является ли строка правильным IPv4-адресом, он возвращает true, если он допустимЛюбые улучшения в регулярных выражениях и элегантности будут очень благодарны:

public static boolean validIP(String ip) {
    if (ip == null || ip.isEmpty()) return false;
    ip = ip.trim();
    if ((ip.length() < 6) & (ip.length() > 15)) return false;

    try {
        Pattern pattern = Pattern.compile("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
        Matcher matcher = pattern.matcher(ip);
        return matcher.matches();
    } catch (PatternSyntaxException ex) {
        return false;
    }
}

Ответы [ 16 ]

3 голосов
/ 30 июня 2015

Попробуйте использовать следующий regrex для IPv4

String ip4Regex="^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3}$";

надеюсь, это поможет:)

2 голосов
/ 30 июня 2015

Самый простой способ проверить, правильно ли указан ip в ipv4, - это использовать commons-validator-1.4.0.jar с классом: -

org.apache.commons.validator.routines.InetAddressValidator

InetAddressValidator

Например

InetAddressValidator inetValidator = InetAddressValidator.getInstance();
inetValidator.isValidInet4Address(yourIPAddress);

, который использует это простое регулярное выражение: -

  "^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$";
1 голос
/ 09 апреля 2017
public static boolean ipv4Check(String ipAddress){

    try{
        if(ipAddress!=null && !ipAddress.isEmpty()){
            String [] ip = ipAddress.split("\\.");
            if(ip.length!=4)
                return false;

            for(int i=0;i<=ip.length-1;i++){
                int j=Integer.parseInt(ip[i]);
                if(j<0 || j>255){
                    return false;
                }
            }
            if ( ipAddress.endsWith(".") ) {
                return false;
            }
            if ( ipAddress.startsWith(".") ) {
                return false;
            }

        }
        return true;
    } catch (NumberFormatException ex) {
        return false;
    }       
}
1 голос
/ 19 октября 2016

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

Эта библиотека прозрачно поддерживает IPv4 и IPv6, поэтому проверка либо работает так же, как описано ниже, а также поддерживает адреса IPC4 с префиксом длины CIDR. Он поддерживает более необычные форматы, такие как inet_aton (например, 10,8 был упомянут в другом ответе здесь)

Проверьте правильность адреса:

    String str = "1.2.3.4";
    IPAddressString addrString = new IPAddressString(str);
    try {
         IPAddress addr = addrString.toAddress();
         ...
    } catch(AddressStringException e) {
        //e.getMessage provides validation issue
    }
1 голос
/ 23 сентября 2015
boolean isValid = inetAddressValidator.isValid(hostName) || hostName.equalsIgnoreCase("localhost");

тот же ответ, что и coobird. Просто добавьте localhost к заявлению. В большинстве сред в качестве допустимого имени хоста используется localhost. Это не формат ipv4, но он должен быть включен для проверки действительности.

1 голос
/ 30 июня 2015

Я бы предложил использовать то, что доступно на разрабатываемой вами платформе / фреймворке.

Если нет ничего, что вы считаете достаточно хорошим, то вы можете просто добавить скомпилированное регулярное выражение в класс помощника. Например, здесь , как это делает фреймворк Android:

public static final Pattern IP_ADDRESS
    = Pattern.compile(
        "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
        + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
        + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
        + "|[1-9][0-9]|[0-9]))");
...