Page 1 sur 1

ereg

Posté : 11 mai 2005, 12:19
par lamk
bonjour all,
après des recherches infructueuses sur la toile pour le fonctionnement d'ereg, je vais vous demander un petit coup d'pouce :p
qqun aurait-il un lien ou une explication claire à me donner svp ?

je veux juste faire un contrôle de saisie sur un champ texte qui ne doit contenir qu'une valeur numérique, entières ou décimales.
mais le problème c'est qu'il ne contrôle que le premier caractère..
(par exemple si je mets 2a, ça passe :/)
if($_POST['masse']!=NULL && !ereg("^[0-9]", $_POST['masse'])){echo "Masse invalide.";}

Posté : 11 mai 2005, 13:44
par dandy

Posté : 11 mai 2005, 13:51
par zeus
C'est normal, ton expression régulière ne teste que le premier caractère !!!

remplace ton ER par celle-ci (qui teste de 1à n caractères) et tu verras que le monde s'éclaire :
ereg("^[0-9]+$", $_POST['masse'])
La traduction littérale de l'ER est : cherche une suite de 1 à n caractères numérique. le "^" sigifie que cette chaine doit se trouver au début de la variable, et le "$" signifie qu'elle doit se trouver à la fin !!! Autrement dit, la variable doit être un entier. Le [0-9] signifie qu'on cherche un caractère numérique et le "+" placé juste après signifie que on cherche de 1 à n de ces caractères

Posté : 11 mai 2005, 14:31
par lamk
merci zeus!! c'est nickel comme explication.
au fait s'il y a des décimales, je dois rajouter quoi ? :oops:

Posté : 11 mai 2005, 14:39
par zeus
Si tu veux trouver tout seul, il faut que tu te pose la question suivante : comment est formé un nombre décimal ?

réponse : une suite de 1à n chiffre, un point (ou une virgule, ou les deux, c'est toi qui voit) et une suite de 1à n chiffres

L'ER s'écrit bien quand tu te pose cette question :
ereg("^([0-9]+)(,[0-9]+)?$", $_POST['masse'])
A savoir que si tu veut limiter le nombre de chiffre après la virgule, tu peut donner une fenetre de taille à la place du "+". Exemple : ([0-9]{1,4}) va accpeter tt les décimaux ayant entre 1 et a chiffres après la virgule.

Le fait d'avoir mis la "," dans la seconde parenthèse et d'avoir mis un "?" après cette parenthèse permet d'accpeter les entiers ET les décimaux. en effet, l'ER va tester la validité des chiffres se trouvant après la virgule seulement si la virgule est présente. LE "?" attend 0 ou 1 fois la suite de caractère "," et 1à n caractères

Cette ER va accepter :
-les entiers : 1 à n chiffres sans virgule
-les décimaux : 1 à n chiffres + virgule + suite de caractères

mais va refuser :
-les entiers finissant par "," (84,)
-les décimaux commencant par "," (,48)


Voili voilu !!!

Posté : 11 mai 2005, 15:17
par lamk
wowoooo 8)
eh ben un grand MERCI !!!
:lol:

Posté : 11 mai 2005, 15:22
par zeus
Je viens de passer un an avec un prof dingue d'ER et il m'a filer des tas de tuyaux !!!