Page 1 sur 1

bizarreries avec preg_match

Posté : 19 oct. 2007, 19:50
par matmamat
Alors voila, je veux tester une adresse postal, pour cela je veux que ma chaine soit composée de caractères alpha numériques, ou apostrophe, et bien sur les espaces, j'ai donc ce regex :

Code : Tout sélectionner

preg_match('#^[\'0-9a-z[:space:]]*$#i', $adresse);
je l'ai testé sur http://www.lumadis.be/regex/test_regex.php,et ça fonctionne apparement bien, cependant sur easyphp ou sur mon compte free, dés que j'ajoute le

Code : Tout sélectionner

[:space:]
des caractères comme "+" ou "&" ou encore "#" passent au travers du filtre.

Alors j'aurai tendance à penser que ç vient d'easyphp (version 2.0b1) et de free mais dans le doute je préfère vous demander votre avis.

Petite précision mon adresse arrive d'un formulaire, et il semblerait que certains caractères soit automatiquement remplacés.

Posté : 19 oct. 2007, 20:16
par Berzemus
je me demande s'il ne faut pas alors mettre deux brackets:

Code : Tout sélectionner

[[:space:]]
Sinon, utilise \s, ça marche pour tous les espaces blancs.

Posté : 20 oct. 2007, 06:03
par matmamat
Tout d'abord merci d'avoir répondu si vite.

J'ai éssayé tout ce que tu m'as dit, mais rien ne marches.

Cependant je pense avoir cerné le problème.
Il s'agit en fait d'AJAX, j'ai donc ceci :

Code : Tout sélectionner

xhr.open("POST", "mon_fichier_de_verif.php", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); send = 'champ=adr&value='+obj.value; xhr.send(send);
où obj est l'input de mon formulaire.
Du coup en mettant un & dans la chaine, cela est interprété comme un paramètre supplémentaire, j'ai réussi à empecher ça en faisant un escape() sur obj.value, cependant le "+" est toujours autorisé, mais je ne pense pas que cela permette un exploit, cependant si vous avez une solution pour pallier à ça je suis malgrés tout preneur.

Posté : 20 oct. 2007, 09:55
par momox
Dans ce cas la ce que je te conseille, c'est de remplacer tous les + par des espaces dans ton script php de traitement ;)

Posté : 20 oct. 2007, 14:56
par matmamat
Merci, mais en fait le problème qui me faisait peur c que l'utilisateur mal intentionné puisse incruster du javascript dans le champ étant donné que le +est le signe de la concaténation. Cependant grâce à ta remarque j'ai trouver une fonction javascript replace, qui me permet de supprimer les signes +avant meme de traiter l'objet, en tout cas merci à vous.