
Envoyé par
pekre
Bonjour à tous;
je voudrais une expression regulière qui teste si n'importe quelle url est bien formée ou pas.
Bon courage, je ne suis même pas sur que tu en trouvera une valide sur internet, c'est comme les regexp de validation d'email, il y a toujours des problèmes avec.

Envoyé par
pekre
j'utilisais cette expression expression mais elle fonctionne pas pour tous les url.
Il y a surement pas mal d'autres problèmes à cette regexp, mais le premier qui me saute aux yeux, c'est que tu n'as pas groupé la gauche et la droite de tes or ( | ). Du coup il s'applique entre 2 caractères alors que tu veux manifestement l'appliquer entre deux groupes.
(http://)|(https://)|(HTTP://)|(HTTPS://)
Qu'il est d'ailleurs préférable d'écrire
pour gérer toutes les combinaisons de majuscules.
une url ça a la forme grosso modo <scheme>://<user>:<password>@<host>:<port>/<url-path>
url-path dépend du scheme. Je suppose que tu ne gère que les urls absolues donc le scheme est obligatoire (parce que dans un browser, //host/path/to/file est valable). Le href= par contre de ta regxep, je ne sais pas ce qu'il fait là, ça n'a rien à voir avec une url. Pourquoi y a-t-il un www. dans ta regexp, ça ne fait pas partie du standard? je pourrais écrire xyz à la place, ça resterait une regexp valide. Enfin, ta regexp que tu as codée s'arrête au host, tu as oublié le path, le port, le user/pass, les paramètres d'encodage puisque tu accepte le ftp, ...
Je te rappelle que le host name accepte aujourd'hui n'importe quelle lettre unicode, pas seulement l'ascii et les nombres.
http://www.météo.be/meteo/view/fr/65657-Climat.html
Et le hostname peux être constitué d'un ipv6 plutôt que d'un nom
http://[2001:4860:0:2001::68]/
Je te signale aussi que . dans une regexp, ça veux dire "n'importe quel caractère", pas "un point". Je n'ai pas trop compris la logique à la fin de ton expression de finalement demander 3 ou plus lettres minuscules pour finir le nom.
Bref ta regexp est bonne pour la poubelle. Et je te suggère de plutôt utiliser la class URL de java pour valider tes urls.
Partager