web-dev-qa-db-fra.com

comment valider un nom d'URL / site Web dans EditText dans Android?

Je veux prendre une entrée, une URL ou simplement un nom de site Web comme, www.google.com de EditText in Android et sur l'utilisateur, cliquez sur le Button à soumettre ou lorsque le EditText perd le focus, l'URL doit être validée, comme au format "www.anyURL.com" ...

Comment puis-je faire ceci? Y a-t-il des fonctionnalités intégrées disponibles dans Android?

79
Preetam

Réponse courte

Utiliser le modèle WEB_URL dans la classe Patterns

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

Il renverra Vrai si l'URL est valide et faux si l'URL n'est pas valide .

Longue réponse

À partir de Android API level 8, il existe un modèle WEB_URL . Citant la source, il "correspond à [es] la plus grande partie de la RFC 3987". Si vous ciblez un niveau inférieur Au niveau de l'API, vous pouvez simplement copier le modèle à partir de la source et l'inclure dans votre application. Je suppose que vous savez comment utiliser les modèles et les matchers, donc je n'entre pas dans les détails ici.

La classe RLUtil fournit également quelques méthodes utiles, par exemple:

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

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

ou utilisez un TextWatcher , ce qui, je pense, serait mieux.

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

 URLUtil.isValidUrl(url)

car il donne des chaînes comme "http: //" comme URL valide qui n'est pas vraie

247
Dimi
/** 
* 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();
}
18
Shailendra Patil

Utilisez cette expression régulière 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;

}
1
Nidhi Savaliya

RLUtil.isValidUrl fonctionnera car il existe depuis le niveau 1 de l'API.

1
twig