2010-09-13 22 views
18

HI all, Estoy utilizando la comunicación de socket simple entre android (como cliente) y PC (como servidor). Estoy usando EditText para la dirección Ip. Quiero validar la dirección IP que se está ingresando en el campo EditText. Por favor, alguien me ayude ... Lo necesito. Gracias por adelantado.Validar IP en android

Respuesta

32

Si se dirige al nivel 8 de API, puede usar la expresión regular global Patterns.IP_ADDRESS. Puede incluir directamente esta expresión regular en su proyecto si orienta dispositivo con Android < 2.2:

private static final Pattern IP_ADDRESS 
    = Pattern.compile(
     "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]" 
     + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]" 
     + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}" 
     + "|[1-9][0-9]|[0-9]))"); 
Matcher matcher = IP_ADDRESS.matcher("127.0.0.1"); 
if (matcher.matches()) { 
    // ip is correct 
} 
15

Para comprobar la dirección IP, ya que está siendo introducida es posible que desee utilizar en su lugar:

private static final Pattern PARTIAl_IP_ADDRESS = 
      Pattern.compile("^((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])\\.){0,3}"+ 
          "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])){0,1}$"); 

ipEditText.addTextChangedListener(new TextWatcher() {      
    @Override public void onTextChanged(CharSequence s, int start, int before, int count) {}    
    @Override public void beforeTextChanged(CharSequence s,int start,int count,int after) {}    

    private String mPreviousText = "";   
    @Override 
    public void afterTextChanged(Editable s) {   
     if(PARTIAl_IP_ADDRESS.matcher(s).matches()) { 
      mPreviousText = s.toString(); 
     } else { 
      s.replace(0, s.length(), mPreviousText); 
     } 
    } 
}); 
+0

Gracias por esto, muy útil :) – Bartando

+0

¡Bonito! Gracias – artman

+0

Esto es impresionante y bastante fácil de generalizar en algún tipo de "RegexValidator" que se puede agregar fácilmente a cualquier EditText para otros casos de uso :) – user1405990

19
Patterns.IP_ADDRESS.matcher(url).matches(); 
+0

Tan simple como puede ser. – Ahsan