Autoriser seulement des nombres dans une variable

Résolu
spacedelta Messages postés 107 Date d'inscription jeudi 23 septembre 2010 Statut Membre Dernière intervention 20 novembre 2011 - 4 sept. 2011 à 19:56
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 5 sept. 2011 à 18:29
Bonjour,
Cela fait depuis une bonne journée que je m'énerve sur mon code.
Je recherche un bout de script qui me permettrait d'autoriser seulement des nombres
dans une variable. J'ai cherché, et j'avais trouvé ceci :
preg_match('`[^1-9]`', $mavariable);

Donc moi ça m'allait. Oui mais je me suis après rendu compte que je ne pouvais pas mettre de nombre du genre 11, 12, 13, 14, ... mais seulement des grand trucs ou du moins avec des 0 (comme 9000058 ou 10)!
Du coup je viens sur ce forum pour vous demander si vous ne connaissez pas une solution qui me permettrait d'autoriser les caractères 0123456789 et bien sûr, de bloquer tous les autres.

Merci d'avance pour votre aide !!
@+

2 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
5 sept. 2011 à 18:29
Salut,

Mon dieu ce que tu te prends la tête !!

[...] mais seulement des grand trucs ou du moins avec des 0 (comme 9000058 ou 10)!
preg_match('`[^1-9]`', $mavariable);


Normal, puisque là tu cherches tout ce qui n'est pas (^) un chiffre entre 1 et 9 (1-9)

preg_match() retournera donc 1 dès qu'il y a un 0 ou un caractère non numérique.

$mavariable = "211021005"; // on peut, il n'y a que des nombres
$mavariable "abc123"; // ah, là on ne pourrait pas/
$caractereamodifier = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_]@', '@[abcdefghijklmnopqrstuvwxyz]@i');
$transformerparsa = array ('','','','','','','','', '');
$verifnocaractspe = preg_replace($caractereamodifier, $$transformerparsa, $mavariable);
if($mavariable == $verifnocaractspe){ // là on compare la valeur reçu de preg_replace
echo("Ma valeur n'a pas de caractères spéciaux, on peut continuer ! =D");
}else{
echo("ben merde, y'a des caractères spéciaux =( ");
}


C'est affreux, pas beau, lourd, complexe, en doublon et ça ne fonctionnera pas à tous les coups.
... et puis ça ne réponds pas à ta demande initiale qui est de n'autoriser que les chiffres (et pas les remplacer)

Bref, avec une regex :
'`^[0-9]*$`'


^ : début de chaîne
[0-9] : les caractères 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9
+ : une ou plusieurs fois (mettre * si tu veux autoriser les chaînes vides)
$ : fin de la chaîne

ou mieux :
'`^\d+$`'

\d == [0-9]

ou encore mieux : utiliser les fonctions natives de PHP qui sont généralement moins gourmandes en ressources que les expressions régulières :
ctype_digit()
is_numeric()
is_int()

Attention à bien lire la doc avant leur utilisation afin que cela réponde correctement à ta demande (comparaison des types, notations style "1e23", etc ...)


Cordialement,


Kohntark -
3
spacedelta Messages postés 107 Date d'inscription jeudi 23 septembre 2010 Statut Membre Dernière intervention 20 novembre 2011
5 sept. 2011 à 08:58
Re Bonjour, je sais que ça fait que une nuit que ce sujet est posté mais mon code ne pouvait pas attendre =S.
Donc pour ceux qui voulait connaître une possibilité pour le faire (que j'ai fait avec un preg_replace) je vous met le code à disposition.
$mavariable = "211021005"; // on peut, il n'y a que des nombres
$mavariable "abc123"; // ah, là on ne pourrait pas/
$caractereamodifier = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_]@', '@[abcdefghijklmnopqrstuvwxyz]@i');
$transformerparsa = array ('','','','','','','','', '');
$verifnocaractspe = preg_replace($caractereamodifier, $$transformerparsa, $mavariable);  
     if($mavariable == $verifnocaractspe){ // là on compare la valeur reçu de preg_replace
echo("Ma valeur n'a pas de caractères spéciaux, on peut continuer ! =D");
}else{
echo("ben merde, y'a des caractères spéciaux =( ");
}

Bon @+ tout le monde si quelqu'un connait une autre façon moins spartiate et plus homogène il sera le bienvenu, @+
0
Rejoignez-nous