Cómo validar un nombre de URL / sitio web en EditText en Android?
Quiero tomar entrada, una URL o simplemente un nombre de sitio web como, www.google.com de EditText en Android y en userclick en el botón para enviar o cuando el EditText pierde el foco la URL debe ser validado, como está en el Formato "www.anyURL.com" …
¿Cómo puedo hacer esto? ¿Hay alguna funcionalidad incorporada disponible en android?
- ¿Cómo puedo verificar que la imagen URI es válida en Android?
- Validación de correo electrónico en EditText - Android
- Cómo validar String usando expresión regular en java
- Cómo cambiar la contraseña usando la contraseña antigua en el análisis de android
- Mostrar mensaje de validación
- Android MVP dudas sobre la validación
- Android: validar contraseña, conformar contraseña y pasar un valor de cadena a través de botón
- ¿Cómo verificar la tarjeta PAN?
- Añadir una anotación personalizada a Android Saripaar
- ¿Cómo validar una cadena usando java regex?
- ¿Cómo determinar si una entrada en EditText es un entero?
- Centrarse en segundo edittext sólo si primero es no-vacío android
- ¿Cómo mostrar errores de entrada en popup?
Respuesta corta
Utilizar el patrón WEB_URL en la clase Patterns
Patterns.WEB_URL.matcher(potentialUrl).matches()
Devolverá True si la URL es válida y false si la URL no es válida .
Respuesta larga
A partir de la API de Android nivel 8 hay un patrón WEB_URL . Citando la fuente, que "coinciden [es] la mayor parte de RFC 3987". Si apunta a un nivel inferior de API, simplemente puede copiar el patrón del origen e incluirlo en su aplicación. Supongo que sabes cómo usar patrones y matchers, así que no voy a entrar en más detalles aquí.
También la clase URLUtil proporciona algunos métodos útiles, por ejemplo:
- IsHttpUrl ()
- IsValidUrl ()
Las descripciones de los métodos no son muy elaboradas, por lo que probablemente es mejor mirar la fuente y averiguar cuál se ajusta mejor a su propósito.
En cuanto a cuándo desencadenar la comprobación de validación, hay múltiples posibilidades: puede utilizar las funciones de devolución de llamada de EditText
- OnFocusChanged () , o
- OnTextChanged ()
O utilizar un TextWatcher , que creo que sería mejor.
NO USE URLUtil para validar la URL como se muestra a continuación.
URLUtil.isValidUrl(url)
Porque da cadenas como "http: //" como URL válida que no es verdadera
/** * 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(); }
URLUtil.isValidUrl funcionará ya que existe desde api nivel 1.
O usted podría apenas utilizar viejo viejo Regex
Pattern urlRegex = Pattern.compile("((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)");
No estoy diciendo que Patterns.WEB_URL
es malo, sólo que hace que sea fácil de probar lo que coincide y lo que no.