Saltar al contenido

¿Cómo validar una URL/nombre de sitio web en EditText en Android?

Esta sección fue aprobado por especialistas para asegurar la exactitud de nuestro contenido.

Solución:

Respuesta corta

Use el patrón WEB_URL en la clase de patrones

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

regresará Verdadero si la URL es válida y false si la URL no es válida.

Respuesta larga

A partir del nivel 8 de la API de Android, existe un patrón WEB_URL. Citando la fuente, “coincide[es] la mayor parte de RFC 3987”. Si apunta a un nivel de API más bajo, simplemente puede copiar el patrón de la fuente e incluirlo en su aplicación. Supongo que sabe cómo usar patrones y comparadores, por lo que no voy a entrar en más detalles. aquí.

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

  • esHttpUrl()
  • es una URL válida ()

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

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

  • onFocusChanged(), o
  • onTextChanged()

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

NO USARURLUtil 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 true

/** 
* 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();

En caso de que, en su UnitTest, tenga NullPointerException entonces usa PatternsCompat en lugar de Patterns.

fun isFullPath(potentialUrl: String): Boolean 
    return PatternsCompat.WEB_URL.matcher(potentialUrl.toLowerCase(Locale.CANADA)).matches()

Además, me di cuenta de que este método devuelve true cuando lo paso Photo.jpg. mi expectativa es false. Por lo tanto, propongo el siguiente método en lugar del anterior.

fun isFullPath(potentialUrl: String): Boolean 
    try 
        URL(potentialUrl).toURI()
        return true
     catch (e: Exception) 
        e.printStackTrace()
    
    return false

Aquí tienes las comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *