8797 sujets

Développement web côté serveur, CMS

Modérateur
Salut tout le monde,

J'ai un petit soucis avec ma regex lors d'une vérification de formulaire :



if (strlen($site)>1 && preg_match("#^((http://)?)w{3}\.[a-z_.-]{2,}\.[a-z]{2,4}$#",$site)==false){
 return false;
}


Pour une url simple, elle fonctionne assez bien. Mais dans le cas où cette dernière est de type : http://mondomaine.com.

Comme je ne suis pas encore un super codeur de regex de la mort qui tue Smiley langue , j'ai essayé avec l'opérateur OU ( | ) en développant un peu plus ma REGEX. mais automatiquement, mon expression régulière est invalide et ne fonctionne plus.

Si une petite âme charitable pouvait m'aider SVP.

@+ et merci encore de vous pencher sur mon petit souchis (japonais)
Modifié par Nolem (08 May 2008 - 20:25)
Salut,

c'est http://mondomaine.com qui pose pb?

c'est parceque tu tu imposes 2 point obligatoire dans ta regexp. pourquoi ne met tu pas comme pour le http:// un point d'interrogation ?

#^((http://)?)(w{3})\.)?[a-z_.-]{2,}\.[a-z]{2,4}$#

c'est un peu restrictif d'imposer 3www c'est pas une norme obligatoire. tu pourrais aussi avoir une url de ftp ou de newsgroup par exemple qui commence pas par http et qui passerais pas. mais ça depend un peu de ton objectif bien sur.

a mon avis le plus simple pour faires des OU c'est de le faire avec des if dans le code PHP. de toute façon l'interet des regexp c'est de factoriser.

si tu as une regexp du genre (^regexp1$)|(^regexp2$)|(^regexp3$) c'est pas mieux qu'un if

sinon montre un exemple de ou qui a planté.
Modifié par CPascal (08 May 2008 - 22:37)
Modérateur
Salut Cpascal,

Je sais que je répond tardivement mais malheureusement quelques soucis d'internet. Néanmoins, je n'avais pas du tout pensé à mettre les 3 W entre parenthèse. Le but de ce petit script est pour vérifier sur un livre d'or si l'utilisateur laisse bien l'url de son site. Je ne pense pas qu'il y ait besoin de développer plus.

En tout cas je te remercie infiniment de t'être penché sur mon petit problème.

@+