80 votes

Valider l'adresse IPv4 en Java

Je veux valider une adresse IPv4 en utilisant Java. Il doit être écrit en utilisant la notation décimale à points , il doit donc comporter 3 points (" . "), aucun caractère, aucun nombre entre les points et les nombres ne doivent se situer dans une plage valide. Comment devrait-il être fait?

97voto

Necronet Points 3212

Assez simple avec une expression régulière (mais notez que ceci est beaucoup moins efficace et beaucoup plus difficile à lire que la réponse de worpet qui utilise un utilitaire Apache Commons)

 private static final String PATTERN = 
        "^(([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){          

      Pattern pattern = Pattern.compile(PATTERN);
      Matcher matcher = pattern.matcher(ip);
      return matcher.matches();             
}
 

Tiré de Mkyong

63voto

worpet Points 1435

25voto

wileyquixote Points 41

Utilisez InetAddresses.forString () de Guava

 try {
  InetAddresses.forString(ipStr);
} catch (IllegalArgumentException e) {
  ...
}
 

11voto

mdma Points 33973

Vous pouvez utiliser une regex, comme ceci:

 (([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]))
 

Celui-ci valide les valeurs sont dans la plage.

Android prend en charge les expressions régulières. Voir 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();
   }
}
 

Pour éviter de recompiler le modèle encore et encore, il est préférable de placer l'appel Pattern.compile() afin qu'il ne soit exécuté qu'une seule fois.

7voto

Jason C Points 14927

Il y a aussi un sans-papiers classe utilitaire sun.net.util.IPAddressUtil, ce qui vous ne devriez pas l'utiliser réellement, bien qu'il pourrait être utile dans un quick one-off, jeter de l'utilitaire:

boolean isIP = IPAddressUtil.isIPv4LiteralAddress(ipAddressString);

En interne, c'est la classe utilitaire InetAddress utilise pour analyser les adresses IP.

Notez qu'il sera de retour vrai pour les chaînes de caractères comme "123", ce qui, techniquement, sont valables les adresses IPv4, juste pas de point-virgule notation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X