Page 1 sur 1

preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 00:01
par two3d
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

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 00:05
par AB
Pour les débutants dans ce domaine y'a ce lien qui va bien.

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 00:09
par two3d
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:

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 10:53
par Berzemus
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 ;)

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 11:05
par two3d
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)$

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 21:28
par Berzemus
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.

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 22:05
par two3d
lol, t'emballe pas sur tes grand chevaux direct ! j'ai droit d'avoir mon point de vue.

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 23:25
par AB
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:

Re: preg_match [0-10], comment faire ?

Posté : 14 oct. 2011, 23:57
par stealth35
pourquoi faire un regex pour ça ?

Re: preg_match [0-10], comment faire ?

Posté : 15 oct. 2011, 02:18
par two3d
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 !";
}

Re: preg_match [0-10], comment faire ?

Posté : 15 oct. 2011, 06:15
par soycd
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.

Re: preg_match [0-10], comment faire ?

Posté : 15 oct. 2011, 10:17
par Ryle
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 ;))