2 votes

Validation URL en java

Hey Je suis en train d'essayer une validation d'URL basée sur Quelle est la meilleure expression régulière pour vérifier si une chaîne est une URL valide? en java mais pour une raison quelconque, ça ne fonctionne pas. Des suggestions?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class urlValidate {

    /**
     * @param args
     */
    public static void main(String[] args) {
        test_url("http://brb/", false);
            test_url("https://localserver/projects/public/assets/javascript/widgets/UserBoxMenu/widget.css", false);
    test_url("https://www.google.com/", true);
    test_url("https://www.google.co.uk/projects/my%20folder/test.php", false);
    test_url("https://myserver.localdomain/", true);
    test_url("https://192.168.1.120/projects/index.php/", false);
    test_url("https://192.168.1.1/", true);
    test_url("https://projectpier-server.localdomain/projects/public/assets/javascript/widgets/UserBoxMenu/widget.css", false);
    test_url("https://2.4.168.19/project-pier?c=test&a=b", false);
    test_url("https://localhost/a/b/c/test.php?c=controller&arg1=20&arg2=20", false);
    test_url("https://user:password@localhost/a/b/c/test.php?c=controller&arg1=20&arg2=20", false);
    test_url("myserver",false);
    test_url("https://tomcat:8080/",true);
    test_url("https://facebook.com",false);
}

public static void test_url(String url, boolean expected) {
    boolean valid = isURLValid(url, true);
    String out = "URL Valide ? : " + (valid ? "oui" : "non") + " pour l'URL : "
            + url + ". Attendu : " + (expected ? "oui" : "non") + ". ";
    if (valid == expected) {
        out += "SUCCÈS\n";
    } else {
        out += "ÉCHEC\n";
    }
    System.out.println(out);
}

public static boolean isURLValid(String url, boolean forcehttps) {
    String regex = "";
    if (forcehttps) {
        regex = "/^(https):\\/\\/";
    } else {
        regex = "/^(https?):\\/\\/";
    }
    regex += "((([a-z0-9]\\.|[a-z0-9][a-z0-9-]*[a-z0-9]\\.)*"
            + "[a-z][a-z0-9-]*[a-z0-9]"
            + "|((\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])\\.){3}"
            + "(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])"
            + ")(:\\d+)?)"
            + "(#([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)?(\\/)"
            + "$/i";

    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(url); // obtenir un objet matcher
    return m.matches();
}

}

2voto

Explosion Pills Points 89756

Le regex est initialement enveloppé dans des barres obliques (pour servir de délimiteurs, ce qui est requis pour PCRE en PHP). Java n'utilise pas ces barres obliques.

if (forcehttps) {
    regex = "^(https):\\/\\";
} else {
    regex = "^(https?):\\/\\";
}

Le /i à la fin est également indésirable. Au lieu de cela, écrivez

Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE)

1voto

Giovani Guizzo Points 527

Vous pouvez utiliser l'API Apache commons-validator. Il y a une classe nommée UrlValidator, ou quelque chose comme ça.
Jetez un œil à ceci : http://commons.apache.org/validator/
Je ne comprends pas beaucoup les regex, donc je ne peux pas beaucoup vous aider sur ce sujet.
Bonne chance.

0voto

AlexR Points 60796

Bien qu'il ne soit pas difficile d'écrire une regex pour la validation d'URL, pourquoi ne pas simplement utiliser la java.io.URL classe ? Il suffit de créer une instance de URL comme suit : new URL(spec) et elle lancera une MalformedURLExcption si la syntaxe est incorrecte.

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