FrenchKiss Posté 23 Mai 2006 Posté 23 Mai 2006 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 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 Posté 23 Mai 2006 Posté 23 Mai 2006 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 : ereg("^[0-9a-zA-Z _.-]*$",$nom) C'est sans garantie mais ça coute rien d'essayer...
FrenchKiss Posté 23 Mai 2006 Auteur Posté 23 Mai 2006 Ah, merci, ça marche impeccable 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
Bourinho Posté 23 Mai 2006 Posté 23 Mai 2006 (modifié) Ca me fait plaisir...T'es la première personne que j'aide sur ce forum!!! Après plus d'une quarantaine de question, je fourni enfin une réponse!!!Quel soulagement... 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 Modifié 23 Mai 2006 par Bourinho
captain_torche Posté 23 Mai 2006 Posté 23 Mai 2006 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 Posté 23 Mai 2006 Posté 23 Mai 2006 Juste un petit mot pour dire que les fonctions preg_* sont beaucoup plus rapides à exécuter que les fonctions ereg_*
FrenchKiss Posté 25 Mai 2006 Auteur Posté 25 Mai 2006 (modifié) 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 : preg("^06([ \.-]{0,1})(([0-9]{2})([ \.-]{0,1}){4})$",$tel) mais ça ne valide même pas 0611223344 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. Modifié 25 Mai 2006 par FrenchKiss
MS-DOS_1991 Posté 25 Mai 2006 Posté 25 Mai 2006 (modifié) La synthaxe des expressions régulières est différente selon la méthode utilisée Pour ton problème, cela donnerait à peu près: 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à ) et mon expression laisse certainement passer d'autres trucs edit: grillé Modifié 25 Mai 2006 par MS-DOS_1991
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant