preg_match [0-10], comment faire ?

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 : preg_match [0-10], comment faire ?

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

par Ryle » 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 ;))

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

par soycd » 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.

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

par two3d » 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 !";
}

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

par stealth35 » 14 oct. 2011, 23:57

pourquoi faire un regex pour ça ?

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

par AB » 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:

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

par two3d » 14 oct. 2011, 22:05

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 ?

par Berzemus » 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.

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

par two3d » 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)$

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

par Berzemus » 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 ;)

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

par two3d » 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:

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

par AB » 14 oct. 2011, 00:05

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

preg_match [0-10], comment faire ?

par two3d » 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