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?
Réponses
Trop de publicités?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
Utilisez InetAddresses.forString () de Guava
try {
InetAddresses.forString(ipStr);
} catch (IllegalArgumentException e) {
...
}
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.
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.