Version complète: sur le forum Webmaster Hub : Tester un champ de formulaire
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
FrenchKiss
Hello
Je suis en train de mettre en place un formulaire de contact, et je voudrais être sûr qu'il soit sécurisé à mort.

Valider une adresse e-mail, easy, on trouve des regexp partout.
Par contre, j'aimerais valider le nom de l'expéditeur, et là ça se corse : je voudrais vérifier que le nom n'est composé que de chiffres, de lettres (accentuées ou pas) et éventuellement des caractères " " (espace), ".", "-" et "_" ...

Quelqu'un peut-il me dire à quoi doit ressembler le regexp correspondant ? Pour l'instant j'ai voulu faire
CODE
ereg("^([0-9a-zA-Z][:space][:punct:]_.-)*$",$nom)
mais ça ne valide jamais.

D'autre part, comment m'assurer que le corps du message soit sans risque ? Je dois vérifier quoi ? L'absence de balises html (je fais un strip_tags, ça suffit ?) et quoi d'autre ?
Bourinho
Je suis pas un pro des Regex, mais je pense que ça ne fonctionne pas parce que telle que tu l'as écrite, il faut que $nom soit composé d'une suite comme suit : un élément de [0-9a-zA-Z] suivi de l'élément de type string suivant " ._.-" et cela autant de fois que nécessaire...

Je pense que tu devrais essayer :
CODE
ereg("^[0-9a-zA-Z _.-]*$",$nom)


C'est sans garantie mais ça coute rien d'essayer...
FrenchKiss
Ah, merci, ça marche impeccable smile.gif
Bon ben finalement j'étais pas loin, mais je sais pas si j'aurais pas perdu énormément de temps à tâtonner tout seul : merci beaucou, donc smile.gif
Bourinho
Ca me fait plaisir...T'es la première personne que j'aide sur ce forum!!! IMSTP2.gif

Après plus d'une quarantaine de question, je fourni enfin une réponse!!!Quel soulagement... laugh.gif

Sinon, vu que la sécurité a l'air d'être une de tes principales angoisses (moi, j'ai la même...). Je pense qu'avec ce code, y a pas trop moyen de te balancer un truc dangereux...(parce que sans < > = " et ' je sais pas comment c'est possible!!!)

Un lien pour "dominer" les Regex : LeSiteDuZero
captain_torche
Sinon, une autre ressource pour les regex, une fois qu'on commence à bien les connaître (le sdz est très bien pour ça, effectivement) : expreg. Très utile à garder sous la main.
MS-DOS_1991
Juste un petit mot pour dire que les fonctions preg_* sont beaucoup plus rapides à exécuter que les fonctions ereg_* wink.gif
FrenchKiss
Ok, merci pour ces conseils.
Je remonte le topic, parce que je continue de me heurter aux expressions régulières : je voudrais maintenant valider un numéro de portable.

Pour ce faire je dois
- vérifier que le premier couple de 2 chiffres est un 06
- vérifier la présence (éventuelle) d'un séparateur de type "." ou " " ou "-"
- vérifier que j'ai 4 itérations de ([0-9]{2})([ .-]{1})* (donc, deux chiffres suivis de 0 ou 1 séparateur)

J'ai fait ça :

CODE
preg("^06([ \.-]{0,1})(([0-9]{2})([ \.-]{0,1}){4})$",$tel)


mais ça ne valide même pas 0611223344 sad.gif

Des idées pour me débloquer ?


///// edit : j'ai fini par trouver :

preg_match("!^06([-. ]{1,3}?[0-9]{2}){4}$!",$tel) valide très bien les numéros de portable. smile.gif
MS-DOS_1991
La synthaxe des expressions régulières est différente selon la méthode utilisée wink.gif

Pour ton problème, cela donnerait à peu près:
CODE
if (preg_match("!^06((-{1})?(.{1})?[0-9]{2}){4}$!", $tel))
{
 // numéro de portable reconnu
}
else
{
 // pas de correspondance
}
  • 0601020304
  • 06-01-02-03-04
  • 06.01.02.03.04
  • 06010203
  • 06-01-02-03
  • 06.01.02.03
  • ab-cd-ef-gh-ij
Mais je ne suis pas un pro des expressions régulières (loin de là tongue.gif ) et mon expression laisse certainement passer d'autres trucs unsure.gif

edit: grillé laugh.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.