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

3 minutos de lectura

avatar de usuario
Preetam

Quiero tomar una entrada, una URL o simplemente el nombre de un sitio web como, www.google.com desde EditText en Android y en el usuario haga clic en el Button presentar o cuando el EditText pierde el foco, la URL debe validarse, como si estuviera en el formato “www.cualquierURL.com“…

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

avatar de usuario
Hesam

En caso de que, en su UnitTest, tenga NullPointerException entonces usa PatternsCompat en vez 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
}

  • Esto me hizo el día. ¡Gracias!

    – rana_brillante

    8 de junio de 2020 a las 22:29

  • Gracias por el consejo sobre el uso de PatternsCompat para ejecutar pruebas.

    – Adi B

    6 oct 2020 a las 10:02

  • La URL web debe estar en minúsculas, de lo contrario, el patrón devolverá falso. solo publicando, por lo que puede ayudar a alguien …

    – praveenb

    25 de septiembre de 2014 a las 5:21

  • @praveenb fragmento de código anterior da www.website es válido, sin .com o .in devuelve verdadero. ¿Puede decir cómo hacer la validación para este escenario?

    – Parth Patel

    13 de agosto de 2019 a las 5:48


  • ¿Por qué exactamente debe estar en minúsculas? Por favor, no diga simplemente “esto es necesario”, ¡también explique por qué es necesario!

    – Carsten Hagemann

    15 de mayo de 2020 a las 9:26

URLUtil.isValidUrl funcionará ya que existe desde el nivel 1 de api.

  • Esta no debería ser la respuesta correcta si usted mira el código para ello . Es solo verificar el esquema inicial de la URL, no que la URL completa sea válida. Esta es probablemente una de las peores validaciones de URL que he visto

    – Miguel

    25/08/2014 a las 19:20


avatar de usuario
nidhi savaliya

Use esta expresión regular en la validación de su sitio web

String WebUrl = "^((ftp|http|https):\\/\\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\\.[a-zA-Z]+)+((\\/)[\\w#]+)*(\\/\\w+\\?[a-zA-Z0-9_]+=\\w+(&[a-zA-Z0-9_]+=\\w+)*)?$";


//TODO for website validation

private boolean isValidate() 
{

        String website = txtWebsite.getText().toString().trim();
        if (website.trim().length() > 0) {
            if (!website.matches(WebUrl)) {
                //validation msg
                return false;
            }
        }
        return true;

}

  • Esta no debería ser la respuesta correcta si usted mira el código para ello . Es solo verificar el esquema inicial de la URL, no que la URL completa sea válida. Esta es probablemente una de las peores validaciones de URL que he visto

    – Miguel

    25/08/2014 a las 19:20


avatar de usuario
Comunidad

O simplemente podría usar buenos viejos 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 eso Patterns.WEB_URL es malo, solo lo hace fácil de probar lo que se empareja y lo que no.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad