Autoriser seulement des nombres dans une variable [Résolu]

spacedelta 109 Messages postés jeudi 23 septembre 2010Date d'inscription 27 mars 2012 Dernière intervention - 4 sept. 2011 à 19:56 - Dernière réponse : kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention
- 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 !!
@+
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 5 sept. 2011 à 18:29
3
Merci
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 -

Merci kohntark 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de kohntark
spacedelta 109 Messages postés jeudi 23 septembre 2010Date d'inscription 27 mars 2012 Dernière intervention - 5 sept. 2011 à 08:58
0
Merci
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, @+
Commenter la réponse de spacedelta

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.