Valider l'adresse IPv4 en Java
Je veux valider une adresse IPv4 à l'aide de Java. Il doit être écrit à l'aide de la dot-notation décimale, de sorte qu'il doit avoir 3 points (".
"), pas de caractères, de chiffres entre les points, et les chiffres devraient être dans une plage valide. Comment devrait-il être fait?
- notez que tous techniquement valide l'adresse IP de notations ont les trois points, seul le point notation de l'adresse IP a eux. Notez également ipv6, et vous pourrait ou ne pourrait pas envie de séparer les espaces d'adressage privé du public.
- Je pense que tout le code examinateurs dans le monde en serait très reconnaissante si vous pouviez changer votre accepté de répondre à worpet de la réponse 🙂
Vous devez vous connecter pour publier un commentaire.
Assez simple avec Expression Régulière (mais c'est beaucoup moins efficace et beaucoup plus difficile à lire que worpet réponse qui utilise un Apache Commons Utilitaire)
Basé sur le poteau Mkyong
Essayer le InetAddressValidator classe utilitaire.
Docs ici:
http://commons.apache.org/validator/apidocs/org/apache/commons/validator/routines/InetAddressValidator.html
Télécharger ici:
http://commons.apache.org/validator/
Utilisation Goyave's
isInetAddress
méthode qui renvoie la valeur true/false si l'adresse est valide. C'est peu plus propre que la vérification de l'exception ;).Vous pouvez utiliser une regex, comme ceci:
Ce on valide les valeurs sont dans la gamme.
Android a le support des expressions régulières. Voir java.util.regex.Modèle.
Pour éviter de recompiler le même motif, il est préférable de placer le
Pattern.compile()
appel afin qu'il soit exécuté qu'une seule fois.0xx, 0x
.128.009.000.032
comme un exemple à la page 5.Vous pouvez utiliser cette fonction -
Il y a aussi un sans-papiers classe utilitaire
sun.net.util.IPAddressUtil
, qui vous ne devriez pas utiliser effectivement, bien qu'il pourrait être utile dans un quick one-off, jetez utilitaire: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 valide les adresses IPv4, juste pas de point-virgule notation.
C'est pour Android, des tests pour IPv4 et IPv6
Remarque: le couramment utilisées
InetAddressUtils
est obsolète. L'utilisation de nouveauxInetAddress
classesSi c'est IP4, vous pouvez utiliser une expression régulière comme suit:
^(2[0-5][0-5])|(1\\d\\d)|([1-9]?\\d)\\.){3}(2[0-5][0-5])|(1\\d\\d)|([1-9]?\\d)$
.L'adresse ip de bibliothèque Java de le faire. La javadoc est disponible sur le lien. Avertissement: je suis le chef de projet.
Cette bibliothèque prend en charge IPv4 et IPv6 de manière transparente, de sorte que la validation soit fonctionne de la même ci-dessous, et il prend également en charge CIDR sous-réseaux ainsi.
Vérifier si une adresse est valide
Écrire adaptée expression régulière et de les valider par rapport à ça. La JVM ont plein le support des expressions régulières.
Il y a de nombreuses façons d'y parvenir,mais l'expression régulière est plus efficace.
Regardez le code ci-dessous:
Expression régulière est le moyen le plus efficace pour résoudre ce problème.
Regardez le code ci-dessous. Le long de la validité, il vérifie également l'adresse IP de la classe à laquelle il appartient et qu'il est réservé ou non l'Adresse IP
Veuillez regarder dans IPAddressUtil OOTB classe présents dans le soleil.net.util ,ce qui devrait vous aider.
sun.*
paquets -> détailsSi vous ne se soucient de la plage, l'expression suivante sera utile pour valider de 1.1.1.1 à 999.999.999.999
Obtenir l'adresse ip valide dans les deux lignes à l'aide de l'Expression Régulière Veuillez consulter le commentaire de session de code comment l'expression régulière travaille pour obtenir le numéro de plage.