2011-09-19 8 views
6

Estoy en la necesidad de dar la validación en mi EditarTexto tal que me permite entrar en un formato de dirección IPValidación en EditarTexto permitir ejemplo IP o URL de la Web de acogida

válida (?.?.?.?), Es decir 132.0.25.225

o

formato de URL web (www.?.?), es decir ejemplo www.example.com

lógica es que si el usuario escriba cualquier valor numérico primera luego de validación (IP) hará la acción

otro usuario debe escribir "www" antes de cualquier cadena web

Nota: se debe realizar onKeyListener() de EditarTexto, quiero decir, mientras el usuario da entrada

En corto - No voy a verificar cuando el usuario complete la entrada y presione el botón OK

Cualquier idea apreciada, Gracias.

Respuesta

12

ip

private static final String PATTERN = 
     "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + 
     "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + 
     "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + 
     "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; 

public static boolean validate(final String ip){   
     Pattern pattern = Pattern.compile(PATTERN); 
     Matcher matcher = pattern.matcher(ip); 
     return matcher.matches();    
} 

url

try { 
    new java.net.URI(url); 
} catch(MalformedURLException e) { 
    // url badly formed 
} 
+0

tu buena respuesta. resuelve mi validación de IP, pero nueva java.net.URI (url); que verifica que el formato de la dirección web no funcione en consecuencia –

+1

UrlValidator urlValidator = new UrlValidator(); urlValidator.isValid ("http://asd.com"); http://commons.apache.org/validator/ – lacas

+0

no está haciendo exactamente lo que quiero, pero me ayuda. –

1

probar este ..

public void checkIP(String Value) 
{ 
    Pattern pattern = Pattern.compile("[0-255].[0-255].[0-255].[0-255]"); 
    Matcher matcher = pattern.matcher(Value); 
    boolean IPcheck = matcher.matches(); 
    if(IPcheck) 
      //it is IP 
     else 
      //it is not IP 


} 
+0

disculpa, funcionará como (1.2.3.4) solo un dígito a veces –

0

Añadir un TextWatcher a su EditarTexto y en el

afterTextChanged (Editable s) 

Valide la entrada usando una expresión regular y si el carácter de entrada no coincide con la expresión regular, simplemente bórrelo utilizando el siguiente método.

Editable.delete(int start, int end) 
1

Este Ione funciona perfectamente para mí para comprobar URL en Android

if (!URLUtil.isValidUrl(url)) { 
    Toast.makeText(this, "Invalid URL", Toast.LENGTH_SHORT).show(); 
    return; 
    } 
0

Aquí una solución diferente para una validación de direcciones IP, pero que podría ser utilizado como referencia también para una validación URL de la tela.

EditText ipText = (EditText) findViewById(R.id.ip_address); 
ipText.setKeyListener(IPAddressKeyListener.getInstance()); 

.........

public class IPAddressKeyListener extends NumberKeyListener { 

private char[] mAccepted; 
private static IPAddressKeyListener sInstance; 

@Override 
protected char[] getAcceptedChars() { 
    return mAccepted; 
} 

/** 
* The characters that are used. 
* 
* @see KeyEvent#getMatch 
* @see #getAcceptedChars 
*/ 
private static final char[] CHARACTERS = 

new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }; 

private IPAddressKeyListener() { 
    mAccepted = CHARACTERS; 
} 

/** 
* Returns a IPAddressKeyListener that accepts the digits 0 through 9, plus 
* the dot character, subject to IP address rules: the first character has 
* to be a digit, and no more than 3 dots are allowed. 
*/ 
public static IPAddressKeyListener getInstance() { 
    if (sInstance != null) 
     return sInstance; 

    sInstance = new IPAddressKeyListener(); 
    return sInstance; 
} 

/** 
* Display a number-only soft keyboard. 
*/ 
public int getInputType() { 
    return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL; 
} 

/** 
* Filter out unacceptable dot characters. 
*/ 
@Override 
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 

    if (end > start) { 
     String destTxt = dest.toString(); 
     String resultingTxt = destTxt.substring(0, dstart) 
       + source.subSequence(start, end) 
       + destTxt.substring(dend); 
     if (!resultingTxt.matches("^\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?")) { 
      return ""; 
     } else { 
      String[] splits = resultingTxt.split("\\."); 
      for (int i = 0; i < splits.length; i++) { 
       if (Integer.valueOf(splits[i]) > 255) { 
        return ""; 
       } 
      } 
     } 
    } 
    return null; 
} 

}

0

debe utilizar la clase java.net.InetAddress. puede verificar todos los formatos de dirección IP: dirección de host (p. ej .: 132.0.25.225) o nombre de host (p. ej .: www.google.com); El formato IPv4 o IPv6 está bien.

El código fuente debe ejecutarse en el hilo de trabajo, porque alguna vez InetAddress.getAllByName (mStringHost) lleva mucho tiempo. por ejemplo: obtienes la dirección del nombre de host.

Thread mThread = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      String mStringHost = "www.google.com"; 
      //String mStringHost = "192.168.1.2"; 
      InetAddress[] list_address = InetAddress.getAllByName(mStringHost); 
      if(list_address != null && list_address.length >=1){ 
       InetAddress inetAddress = list_address[0]; 
       Log.d("test","inetAddress ="+ inetAddress.getHostAddress()); 
       if(inetAddress instanceof Inet4Address){ 
        //IPv4 process 
       }else{ 
        //IPv6 process 
       } 
      }else{ 
       throw new Exception("invalid address"); 
      } 
     }catch(Exception e){ 
      Log.e(TAG,"other exception",e); 
      Toast.makeText(context, "Invalid host address or host name", Toast.LENGTH_SHORT).show(); 
      //process invalide ip address here 
     } 
    } 
}); 

mThread.start() 
Cuestiones relacionadas