Je pense que la bonne façon de faire est de construire un IPAddress
et l'instanciez en lui donnant une représentation en chaîne de l'adresse IP.
De cette façon, vous pouvez répartir les différentes étapes de validation dans des méthodes d'instance et obtenir une certaine séparation des tâches aller.
Par exemple, ceci est typiquement une méthode à part entière, que l'on appelle simplement isEmpty
:
return (ip == null || ip.isEmpty());
Cela devrait également être une méthode distincte, vous pourriez appeler celle-ci hasProbableLength
.
ip = ip.trim();
return ((ip.length() < 6) & (ip.length() > 15));
Ici, il y a beaucoup de choses qui se passent. J'essaierais de les séparer et peut-être d'éviter complètement l'utilisation de l'expression rationnelle.
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;
}
Je commencerais par diviser la chaîne en points et je verrais si j'obtiens exactement quatre groupes. Appelez cette méthode divideIntoGroups
Je validerais ensuite chacun des groupes pour qu'ils aient une valeur comprise entre 0 et 255. Appelez cette méthode validateGroups
Maintenant que vous avez ceci, si vous voulez étendre cette classe pour rechercher également si l'IP est localhost ou si c'est une adresse de diffusion, il est assez facile de le faire. Voici ce que séparation des préoccupations vous donne.
Vous pouvez également savoir exactement laquelle de vos règles de validation a été enfreinte lors de la validation de la chaîne d'adresse IP. Ce que les expressions rationnelles ne peuvent pas faire.