103 votes

comment valider une URL / un nom de site web dans EditText sous Android ?

Je veux prendre l'entrée, une URL ou juste un nom de site web comme, www.google.com de EditText dans Android et sur l'utilisateur, cliquez sur le Button à soumettre ou lorsque le EditText perd l'accent sur le fait que l'URL doit être validée, comme c'est le cas dans le format " www.anyURL.com "...

Comment puis-je le faire ? Y a-t-il une fonctionnalité intégrée disponible dans Android ?

316voto

Dimi Points 3211

Réponse courte

Utiliser le motif WEB_URL dans la classe de motifs

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

Il retournera Vrai si l'URL est valide y false si l'URL n'est pas valide .

Réponse longue

À partir du niveau 8 de l'API d'Android, il existe une WEB_URL modèle. En citant la source, il "correspond à la majeure partie de la RFC 3987". Si vous visez un niveau d'API inférieur, vous pouvez simplement copier le motif de la source et l'inclure dans votre application. Je suppose que vous savez comment utiliser les motifs et les matrices, je ne vais donc pas entrer dans les détails ici.

Aussi la classe URLUtil fournit quelques méthodes utiles, par exemple

Les descriptions des méthodes ne sont pas très élaborées, il est donc probablement préférable de consulter la source et de déterminer celle qui correspond le mieux à votre objectif.

Quant à savoir quand déclencher le contrôle de validation, il existe plusieurs possibilités : vous pouvez utiliser les fonctions de rappel de EditText

ou utiliser un TextWatcher ce qui, à mon avis, serait mieux.

N'UTILISEZ PAS URLUtil pour valider l'URL comme ci-dessous.

 URLUtil.isValidUrl(url)

parce qu'il donne des chaînes comme "http://" comme URL valide, ce qui n'est pas vrai.

22voto

Shailendra Patil Points 337
/** 
* 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();
}

10voto

Hesam Points 6415

Au cas où, dans votre UnitTest, vous obtenez NullPointerException puis utiliser PatternsCompat au lieu de Patterns .

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

Aussi, j'ai réalisé que cette méthode retourne true quand je le passe Photo.jpg . Je m'attends à ce que false . Par conséquent, je propose la méthode suivante au lieu de la précédente.

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

2voto

twig Points 938

URLUtil.isValidUrl fonctionnera puisqu'il existe depuis le niveau 1 de l'api.

0voto

Nidhi Savaliya Points 159

Utilisez cette regex sur la validation de votre site 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;

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X