expression reguliere

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : expression reguliere

par mosquitout » 24 août 2007, 08:33

Je vais me racheter qlq neurone pour approfondir les pcre :wink:
Pas de php (ni de questions) aujourd'hui, à+ :D

par zeus » 24 août 2007, 08:04

Effectivement, le but n'est pas que tu ne poses plus de questions.
Le but est que tu comprennes ce que nous t'expliquions.

Si tu ne comprends pas une explication, dit le, on essayera de le ré-expliquer différemment.
Si tu as compris essaye de ne pas l'oublier de suite :lol:

par Sékiltoyai » 24 août 2007, 01:47

Si si, tu peux poster si tu as d'autres problèmes, mais il faut juste faire un peu attention à ces détails, qui sont fatals, surtout lorsque le sujet traite des pcre.
Dans les posts qui te sont adressés, tout est important et doit être considéré.

par mosquitout » 24 août 2007, 00:29

Ahhhh, désolééé, oui,oui, j'ai vu l'oublie. Bon je promet , plus jamais je ne posterai à propos des expressions régulières. Grand merci encore.
et bonne journée ;)

par zeus » 23 août 2007, 23:48

En plus mosquitout, je te signale que je te l'ai déjà expliqué :evil:

par Sékiltoyai » 23 août 2007, 23:44

Dans ce cas, tu dois utiliser ^ et $ pour spécifier le début et la fin de la chaine à pcre, car si tu ne le fais pas, un nombre tel que 1111.111 sera accepté car 111.11 obéit à l'expression régulière, alors que si tu places ^ et $ pour dire à pcre que le début de ton pattern doit correspondre au début de ta chaine et la fin de ton pattern à la fin de ta chaine, la chaine suscité ne pourra pas passer.

par mosquitout » 23 août 2007, 21:04

Oui, petite précision, j'utilise cette expression dans une fonction de vérification de saisie avant enregistrement.
La logique c est: Si la vérification est ok = j'enregistre la donnée.
Dans cette fonction de vérification, je test la taille de la saisie et ici dans ce cas le contenu que je souhaite limiter à 3entier 1 virgule et deux décimaux maxi, donc en fait un nombre décimal avec deux décimales possibles et trois entiers maxi possible. Je pense donc qu'en utilisant une expression ca peut être une solution pour tester le contenu.
Voilà, mais débutant en php, ca me dépasse un peu !

:?

par zeus » 23 août 2007, 20:55

Déjà, il faudrait que tu décomposes les tâches.
Le code que tu nous as donné, c'est un preg_match(), donc une vérification de la présence ...

Maintenant, tu nous parles d'enregistrement :?
Est-ce que tu as vérifier le contenu de ce que tu passais à preg_match(), ce que 'il restait après l'exécution, etc ...

par mosquitout » 23 août 2007, 20:51

Ben ..... là même avec un deuxième \ y'a pas trop de changement :roll:
Heu là ca me dépasse :cry:

par Calimero » 23 août 2007, 20:33

Argh ... ca me dépasse un peu. Bon le début ok, sauf que c'est bien 3 entier possibles et non deux.
Mais en testant
#[0-9]{1,3}(\.[0-9]{1,2})?#
je suis bien limité à deux décimaux, si je rentres 1.244 => il m'enregistre 1.24 ca va
Mais si je rentres 12345, là il m'enregistre 999.99 !
aie aie aie ...
Il faut rajouter un deuxième \ devant ton point, il n'a pas été reçu comme échappé par la libPCRE (et donc il prend aussi un chiffre) ;-)

par mosquitout » 23 août 2007, 20:18

Argh ... ca me dépasse un peu. Bon le début ok, sauf que c'est bien 3 entier possibles et non deux.
Mais en testant
#[0-9]{1,3}(\.[0-9]{1,2})?#
je suis bien limité à deux décimaux, si je rentres 1.244 => il m'enregistre 1.24 ca va
Mais si je rentres 12345, là il m'enregistre 999.99 !
aie aie aie ...

par Sékiltoyai » 23 août 2007, 19:57

Remplace le [0-9] par \d, ce sera plus lisible.

par zeus » 23 août 2007, 19:52

Cette expression régulière va te permettre les décimaux avec 1 à 2 chiffres entier et 1 à 3 décimales, mais également les décimaux jusqu'à 5 entiers (exemple : 12123).
De même, le ".", dans une expression régulière signifie "n'importe quel caractère"

Il faut que tu interdises la présence des décimales si le point n'est pas présent ;)

Code : Tout sélectionner

#[0-9]{1,2}(\.[0-9]{1,3})?#
Les parenthèses encadrant la partie décimale permettent de ne demander les décimales uniquement si le . est présent.

le \. permet de dire que tu attends un . et non pas un caractère quelconque

par mosquitout » 23 août 2007, 19:17

oui, j'avoue que c'est pas evident à saisir.
Je fais un autre essai en prenant compte de tes remarques.
Je veux tester un champs numérique avec maxi 3 entier et maxi 2 décimales.
Si j'écris :

if (preg_match("#^[0-9]{1,3}.?[0-9]{1,2}?$#", $contenu))

Là je spécifie bien qu'au début j'ai le droit de 1 à 3 chiffres, ensuite un point facultatif (la virgule) et ensuite en fin de chaine de 1 à 2 chiffres, facultatifs aussi.

Bon au test, c'est pas encore ca mais je suis sur la voie :?
Merci de ton aide

par zeus » 23 août 2007, 18:38

ton expression régulière va retourner vrai si, dans ta chaine, tu trouve au moins une fois de 1 à 3 chiffres compris entre 1 et 9
Dans "5.3", il y a "5" et "3" donc, l'expression régulière va retourner vrai.

Si tu désire uniquement de 1 à 3 chiffres compris entre 1 et 9, il faut dire à ton expression régulière qu'il ne doit rien y avoir d'autre, c'est à dire spécifier que le début et la fin de la chaine doivent être autour de ton masque :
if (preg_match("#^[0-9]{1,3}$ #", $contenu))

^ signifie "début de la chaine"
$ signifie "fin de la chaine"