bizarreries avec preg_match

Petit nouveau ! | 3 Messages

19 oct. 2007, 19:50

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.

ViPHP
ViPHP | 4039 Messages

19 oct. 2007, 20:16

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.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Petit nouveau ! | 3 Messages

20 oct. 2007, 06:03

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.

Mammouth du PHP | 1511 Messages

20 oct. 2007, 09:55

Dans ce cas la ce que je te conseille, c'est de remplacer tous les + par des espaces dans ton script php de traitement ;)

Petit nouveau ! | 3 Messages

20 oct. 2007, 14:56

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.