2013-03-28 5 views
1

Я искал, но ничего не нашел. Как проверить, содержит ли текст IP-адрес? Я попытался это, но он не работает:Как проверить, содержит ли текст IP-адрес?

public boolean ip(String a_text) { 
    String ip_filter = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"; 
    if (a_text.toLowerCase().contains(ip_filter.toLowerCase())){ 
     return true; 
    } 
    return false; 
} 
+0

Вы должны использовать 'матчи()', а не 'содержит() '. –

+0

возможно дублирование http://stackoverflow.com/questions/4581877/validating-ipv4-string-in-java – evgenyl

+0

@AndrewLogvinov, важно сказать, что если OP использует 'match', то регулярное выражение должно совпадать со всей строкой , Так же, как если бы он начинал/и привязывался к шаблону. –

ответ

12

Вы пытаетесь использовать Regular Expression с методом contains. И этот метод не получает регулярное выражение в качестве аргумента. Он получает простую строку. Вы должны попробовать использовать Pattern и Matcher.

Вот пример:

public static boolean ip(String text) { 
    Pattern p = 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 m = p.matcher(text); 
    return m.find(); 
} 

РЕДАКТИРОВАТЬ: Я обновил шаблон на более подходящий один, нашли here.

+0

Он отлично работает! Спасибо! – HydroTekZ

1

Да, использование матч, а лучше регулярное выражение, которое я использовал в прошлом:

((0|1[0-9]{0,2}|2[0-9]?|2[0-4][0-9]|25[0-5]|[3-9][0-9]?)\.){3}(0|1[0-9]{0,2}|2[0-9]?|2[0-4][0-9]|25[0-5]|[3-9][0-9]?) 

От RegExLib

0

Вы можете сделать много вещей с Regex. Но почему ты должен ?! У вас уже есть хорошие и проверенные библиотеки, как Guava

boolean isValid = InetAddresses.isInetAddress("1.2.3.4"); 

Appache Validator

isValidInet4Address(String) 

И так далее (см this пост)