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?

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]+)?|(?:ww‌​w.|[-;:&=\+\$,\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.

  • Android: ¿Cómo establecer números y caracteres aceptables en EditText?
  • ¿No se muestran los indicadores de error (para validaciones de formularios) para android 4.2?
  • ¿Cuál es una buena manera de limitar el número de palabras que se pueden introducir en una vista de edición de Android?
  • Cómo validar el código ussd para la comprobación del saldo
  • Cómo restringir el tiempo de entrada para edittext en android
  • Cómo restringir el EditText para aceptar sólo caracteres alfanuméricos
  • RxJava- validación de formulario RxAndroid en dynamic EditText
  • EditText campo es necesario antes de pasar a otra actividad
  • ¿Cómo validar los valores de TextInput en reaccionar nativo?
  • Android manual X509 validación de la cadena de certificados
  • Entrada de archivo HTML en Chrome para Android falta extensión y tipo mime
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.