preg_match [0-10], comment faire ?

Avatar du membre
Mammouth du PHP | 1564 Messages

14 oct. 2011, 00:01

Bonjour,

j'aimerai demander en langage preg_match si ma variable est un chiffre de 1 à 10, comment faire ?

voici ce que j'ai fait pour le moment:
$i = "9";
if(preg_match("#^[0-9]{1,2}$#",$i)) { echo "oui"; } else { echo "non"; }
Mais bien évidement, le chiffre peut être jusqu'à 99 et non 10 pile.


Merci pour votre aide.


[EDIT]:

Je viens de trouvé à l'instant:
$i = "11";
if(preg_match("#^(1|2|3|4|5|6|7|8|9|10)$#",$i)) { echo "oui"; } else { echo "non"; }
Merci quand même
Modifié en dernier par two3d le 14 oct. 2011, 00:08, modifié 1 fois.

ViPHP
AB
ViPHP | 5818 Messages

14 oct. 2011, 00:05

Pour les débutants dans ce domaine y'a ce lien qui va bien.

Avatar du membre
Mammouth du PHP | 1564 Messages

14 oct. 2011, 00:09

oui mais ce lien j'arrête pas de le lire et de le relire et il commence à me... hein, bref :mrgreen:


J'ai trouvé, merci :wink:

ViPHP
ViPHP | 4039 Messages

14 oct. 2011, 10:53

C'est quoi ce "merci quand même" ? Tu poses un question à minuit, quelqu'un te répond à minuit 5 et tu trouves encore à redire ? :shock:
$i = "11";
if(preg_match("#^(1|2|3|4|5|6|7|8|9|10)$#",$i)) { echo "oui"; } else { echo "non"; }
Merci quand même
Ceci dit, c'est bien d'avoir trouvé. Une version plus brève aurait pu être:

Code : Tout sélectionner

^(10|\d)$
Le regex vient surtout avec l'expérience ;)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Mammouth du PHP | 1564 Messages

14 oct. 2011, 11:05

non mais ce que je voulais dire c'est qu'il existe pas que ce lien dans la vie (sur le web plutôt ^^), un exemple: ce lien

PS: ta regex ne me convient pas car elle laisse passer le 0 (je souhaite des chiffre de 1 à 10

Celle-ci est la mieux à mon avis (reprise de ton exemple):
^([1-9]|10)$

ViPHP
ViPHP | 4039 Messages

14 oct. 2011, 21:28

Tiens, pas vu que tu ne voulais pas le zéro. Et pourquoi pas d'ailleurs ? C'est quoi c'est discrimination ? Qu'est-ce qu'il a de si mauvais le pauvre ? HEIN ?? IL NE VAUT PAS ASSEZ C'EST CA !! JUSTE PASK'IL NE VAUT RIEN, TU L'IGNORES !!???!!!

BEn c'est du joli. pff.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Mammouth du PHP | 1564 Messages

14 oct. 2011, 22:05

lol, t'emballe pas sur tes grand chevaux direct ! j'ai droit d'avoir mon point de vue.

ViPHP
AB
ViPHP | 5818 Messages

14 oct. 2011, 23:25

Oui bon y'a pas que ce lien là mais si tu avais fait les exos à la place de simplement les lire tu aurais pu trouver la réponse, même avec ce tuto...

Cela dit je comprend que l'on puisse être plus sensible et intéressé par un tuto plutôt que par un autre (à qualité globalement équivalente). Et "vulgarisation informatique" est très souvent une bonne adresse pour dégrossir un sujet. D'ailleurs je vois que tu avance.

Une fois les bases assimilées, pour aller plus loin tu peux visiter ce lien. J'ai voulu te le donner hier mais le lien était rompu et ne sachant pas si c'était un pb temporaire ou pas, je me suis abstenu. Te voilà donc avec trois liens, t'as de quoi faire maintenant pour les regex :wink:

ViPHP
ViPHP | 5462 Messages

14 oct. 2011, 23:57

pourquoi faire un regex pour ça ?

Avatar du membre
Mammouth du PHP | 1564 Messages

15 oct. 2011, 02:18

Une fois les bases assimilées, pour aller plus loin tu peux visiter ce lien. J'ai voulu te le donner hier mais le lien était rompu et ne sachant pas si c'était un pb temporaire ou pas, je me suis abstenu. Te voilà donc avec trois liens, t'as de quoi faire maintenant pour les regex :wink:
C'est justement un des lien que souhaitais visiter pour la réponse à ma question mais comme j'ai vue aussi qu'il été rompu, j'ai donc posé ma question ici.
pourquoi faire un regex pour ça ?
Parce que ça me semblai le plus adapter et plus rapide que l'autre méthode que j'aurai instaurée:
$i = 9;
if($i == 1 OR $i == 2 OR $i == 3 ... OR $i == 10) {
 echo "c'est bon !";
} else {
 echo "c'est pas bon !";
}

Eléphanteau du PHP | 44 Messages

15 oct. 2011, 06:15

pourquoi faire un regex pour ça ?
Parce que ça me semblai le plus adapter et plus rapide que l'autre méthode que j'aurai instaurée:
$i = 9;
if($i == 1 OR $i == 2 OR $i == 3 ... OR $i == 10) {
 echo "c'est bon !";
} else {
 echo "c'est pas bon !";
}
[/quote]

Et les opérateurs de supériorité/infériorité ?
if( $i >=1 || $i <= 10 )
        // OK
Une bête condition sera toujours plus rapide qu'une expression régulière.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 oct. 2011, 10:17

En l'occurrence, si ta variable ne contient qu'un nombre, les opérateurs booléen seront plus efficace, mais surtout plus facile à lire et à maintenir. En lisant le code :
if ( $i >=1 && $i <= 10 )
tu comprend facilement que le if test si $i est compris entre 1 et 10 inclus (Nota, c'est un ET qu'il te faut si tu veux que la valeur soit à la fois supérieure à 0 et inférieure à 11).
Alors que tu vas passer un certain temps à essayer de décrypter ce que cette condition va faire :
if (preg_match("#^([1-9]|10)$#",$i))
Et par ailleurs, même si cela se chiffre en millième de secondes, php ira plus vite a tester deux opérateurs sur des primitives qu'à appliquer une expression régulière sur une chaine de caractères :)

(d'ailleurs, si $i est un nombre, il ne faut pas mettre de guillemets autour quand tu déclares sa valeur : 11 est le chiffre, "11" est la chaine. PHP fera tout seul la conversion si cela s'avère nécessaire, mais c'est pas la peine de lui donner du travail supplémentaire ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...