studio programacion herramientas fundamentos con avanzado aplicaciones android validation url android-edittext android-widget

programacion - cómo validar un nombre de URL/sitio web en EditText en Android?



manual de android en pdf (4)

Respuesta corta

Use el patrón WEB_URL en la clase de patrones

Patterns.WEB_URL.matcher(potentialUrl).matches()

Devolverá True si la URL es válida y falsa si la URL no es válida .

Respuesta larga

A partir de Android API nivel 8 hay un patrón de WEB_URL . Citando la fuente, "coincide con la mayor parte de RFC 3987". Si se dirige a un nivel de API más bajo, simplemente copie el patrón de la fuente e inclúyalo en su aplicación. Supongo que sabes cómo usar patrones y combinaciones, así que no entraré en más detalles aquí.

Además, la clase URLUtil proporciona algunos métodos útiles, por ejemplo:

Las descripciones de los métodos no son muy elaboradas, por lo tanto, probablemente sea mejor que busque la fuente y descubra cuál se ajusta mejor a su propósito.

En cuanto a cuándo activar la verificación de validación, hay múltiples posibilidades: puede usar las funciones de devolución de llamada EditText

o use un TextWatcher , que creo que sería mejor.

NO USE URLUtil para validar la URL de la siguiente manera.

URLUtil.isValidUrl(url)

porque da cadenas como "http: //" como URL válida que no es verdadera

Quiero tomar una entrada, una URL o simplemente un nombre de sitio web como, www.google.com de EditText en Android y en el usuario, haga clic en el botón para enviar o cuando EditText pierda el foco, la URL debe validarse, como en el formato "www.anyURL.com" ...

¿Cómo puedo hacer esto? ¿Hay alguna funcionalidad incorporada disponible en Android?


O podrías usar el viejo Regex

Pattern urlRegex = Pattern.compile("((([A-Za-z]{3,9}:(?:////)?)(?:[-;:&=/+/$,/w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:ww‌​w.|[-;:&=/+/$,/w]+@)[A-Za-z0-9.-]+)((?://[/+~%//./w-_]*)?/??(?:[-/+=&;%@./w_]*)#?‌​(?:[/w]*))?)");

No digo que Patterns.WEB_URL sea ​​malo, simplemente hace que sea más fácil probar qué coincide y qué no.


isValidUrl() funcionará desde que existe desde el nivel 1 de la API.


/** * This is used to check the given URL is valid or not. * @param url * @return true if url is valid, false otherwise. */ private boolean isValidUrl(String url) { Pattern p = Patterns.WEB_URL; Matcher m = p.matcher(url.toLowerCase()); return m.matches(); }