Я думаю, что правильный способ - создать класс IPAddress
и создать его экземпляр, передав ему строковое представление IP-адреса.
Таким образом, вы можете разделить различные этапы проверки на методы экземпляра.и получить некоторое разделение интересов .
Например, здесь это, как правило, свой собственный метод, вызовите его просто isEmpty
:
return (ip == null || ip.isEmpty());
Также это должнобыть отдельным методом, вы могли бы назвать его hasProbableLength
.
ip = ip.trim();
return ((ip.length() < 6) & (ip.length() > 15));
Здесь происходит много вещей.Я попытался бы разбить это и, возможно, попытаться полностью пропустить регулярное выражение.
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;
}
Сначала я разбил бы строку на точки и увидел, что получаю ровно четыре группы.Вызовите этот метод divideIntoGroups
Я бы затем проверил каждую из групп на значение от 0 до 255. Вызовите этот метод validateGroups
Теперь, когда у вас есть это, если вы когда-либоВы хотите расширить этот класс, чтобы также определить, является ли IP localhost или широковещательный адрес, это довольно легко сделать.Это то, что разделение интересов дает вам.
Вы также можете точно сказать, какое из ваших правил проверки было нарушено при проверке строки IP-адреса.Что-то, что регулярное выражение не будет.