Expression régulière - vérification d'url pose problème

Eléphant du PHP | 193 Messages

30 mars 2009, 10:05

Bonjour à tous!

J'ai un souci avec une expression régulière. Je pensais qu'elle fonctionnait très bien et j'ai en fin de compte un problème avec un type d'url.

Voici l'expression régulière :
$website = "#^http://[A-Za-z0-9-_=/.]+\.[a-zA-Z]{2,4}?[A-Za-z0-9-_=/.?&%()]+$#";
Il n'y a aucun problème avec la plupart des url lors de la vérif avec preg_match mais avec celle là...

http://www.e-vendee.fr çà ne fonctionne pas. Avec un ".com", çà passe mais pas avec le ".fr". Cà fonctionne aussi avec ee-vendee.fr.

Ce qui pose problème (a priori), c'est le couple une seule lettre avant le "-" et seulement deux lettres après le '.' de l'extension.

Avez-vous une idée de ce qui se passe?

Merci par avance pour vos réponses.

[Edit] Trouvé!!!! Merci Dread!

Il faut ajouter des parenthèses pour la vérification des extensions, ce qui protège seulement le nombre des caractères de cette extension:
$website = "#^http://[A-Za-z0-9-_=/.]+\.([a-zA-Z]{2,4})?[A-Za-z0-9-_=/.?&%()]+$#";
et une autre version :
$website = "#^http://([-[:alnum:]]+)?(\.-)?[-[:alnum:]]+\.([a-zA-Z]{2,4})?[A-Za-z0-9-_=/.?&%()]+$#";
On peut également remplacer le 4 par * afin de prendre en compte des extensions plus longues (personnalisées peut-être pour bientôt) :
$website = "#^http://([-[:alnum:]]+)?(\.-)?[-[:alnum:]]+\.([a-zA-Z]{2,*})?[A-Za-z0-9-_=/.?&%()]+$#";
[/Edit]

@+!