Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2581 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  comment tester si une variable est un entier numérique ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment tester si une variable est un entier numérique ???

n°1244907
jerkeve
Posté le 14-11-2005 à 01:14:43  profilanswer
 

bonjour,
 
j'ai un bete probleme :  
 
quand je teste le type d'une variable récupérée en post depuis un formulaire (avec un gettype()), elle est toujours de type string... meme si ce sont des chiffres qui ont été enntrés dans le formulaire, comme un N° de telephone par exemple (sans espace  ni rien).
 
Comment donc tester si cette variable est (ou n'est pas) un chiffre entier ???
 
merci de votre aide  :)

mood
Publicité
Posté le 14-11-2005 à 01:14:43  profilanswer
 

n°1244927
gatsusat
Posté le 14-11-2005 à 02:12:14  profilanswer
 

isnumeric ?
 
http://fr.php.net/tafonction
 
 ou sinon rechercher un peu sur google

n°1244957
jerkeve
Posté le 14-11-2005 à 09:41:41  profilanswer
 

je ne poserais pas la question ici si je n'avais pas d'abord cherché sur gougueul ;)
 
Justement, le isnumeric donne toujours ub false, je viens d'expliquer qu'un champ input txt renvoie toujours une chaine string. Mon pb est de pouvoir detecter si cette chaine contient des données numériques ou non puisque le type n'ets plus utilisable pour ce test ...  
 
 
Any idea ?

n°1244968
gatsusat
Posté le 14-11-2005 à 09:55:32  profilanswer
 

en cherchant sur le manuel de PHP :  

Citation :


Conversion de chaînes de caractères
Lorsqu'une chaîne de caractères est évaluée comme une valeur numérique, le résultat et le type de la variable sont déterminés comme suit.  
 
La chaîne de caractères est de type "double" si elle contient un des caractères '.', 'e' ou 'E'. Sinon, elle est de type entier ("integer" ).  
 
La valeur est définie par la première partie de la chaîne. Si la chaîne de caractères débute par une valeur numérique cette valeur sera celle utilisée. Sinon, la valeur sera égale à 0 (zéro). Les données numériques valides ont un signe optionel, suivies par un ou plusieurs digits (optionnellement, contenant un point de décimal), sivies par un exponentiel optionnel. L'exponentiel peut être un 'e' ou un 'E' suivi par un ou plusieurs digits.  
 
Exemple 11-19. Exemples de conversions automatiques

Code :
  1. <?php
  2. $foo = 1 + "10.5";                // $foo est du type  float (11.5)
  3. $foo = 1 + "-1.3e3";              // $foo est du type  float (-1299)
  4. $foo = 1 + "bob-1.3e3";          // $foo est du type  integer (1)
  5. $foo = 1 + "bob3";                // $foo est du type  integer (1)
  6. $foo = 1 + "10 petits cochons";      // $foo est du type  integer (11)
  7. $foo = 4 + "10.2 gros cochons"; // $foo est du type  float (14.2)
  8. $foo = "10.0 cochons " + 1;          // $foo est du type  float (11)
  9. $foo = "10.0 cochons " + 1.0;        // $foo est du type  float (11)
  10. ?>



n°1245006
olivthill
Posté le 14-11-2005 à 10:33:26  profilanswer
 

:hello:  
Il y a longtemps de cela, j'avais récupéré la fonction suivante sur un site, dont je ne me souviens plus de l'adresse. D'après son auteur, dont je ne me rappelle plus du nom, cette fonction est meilleur que le simple is_numeric. Je l'emploie souvent et elle me donne satisfaction.

Code :
  1. // Test if a field contains an integer value. Returns true or false
  2. function myIsInt($x) {
  3.    return(is_numeric($x) ? intval(0+$x) == $x : false);
  4. }

:)

n°1245009
Ex-Floodeu​r
La Source
Posté le 14-11-2005 à 10:34:40  profilanswer
 

olivthill a écrit :

:hello:  
Il y a longtemps de cela, j'avais récupéré la fonction suivante sur un site, dont je ne me souviens plus de l'adresse. D'après son auteur, dont je ne me rappelle plus du nom, cette fonction est meilleur que le simple is_numeric. Je l'emploie souvent et elle me donne satisfaction.

Code :
  1. // Test if a field contains an integer value. Returns true or false
  2. function myIsInt($x) {
  3.    return(is_numeric($x) ? intval(0+$x) == $x : false);
  4. }

:)


elle reprend le is_numeric ta fonction hein  [:columbo2]


---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
n°1245016
olivthill
Posté le 14-11-2005 à 10:44:19  profilanswer
 

La valeur ajoutée de ma fonction réside dans le test de intval(0+$x) == $x . Cela permet de savoir si la valeur, que l'on sait déjà être numérique par le précédent test is_numeric, est un entier ou non. Il ne s'agit pas seulement de savoir si une donnée est numérique, mais aussi si elle est un entier.

n°1245028
jerkeve
Posté le 14-11-2005 à 10:51:03  profilanswer
 

arrrggggHhhh ! je ne dois pas etre explicite...
 
Mon pb n'est pas de tester le type de la variable, elle est TOUJOURS de type STRING quand je la récupère en post depuis un formulaire.  
 
Comment voir si une variable de type string contient des données numériques ?
 
Testez, faites un mini formulaire :

Code :
  1. <form action="test.php" method="post">
  2. <input type="text" name="telephone" />
  3. <form>


 
Ensuite récupérez la variable $_POST['telephone'] sur une page test.php, et testez son type :

Code :
  1. echo gettype($_POST['telephone'])


 
et ca va vous donner "string", meme si la chaine est 0145673456 ...
 
DONC : question (la bonne !!) : comment tester si $_POST['telephone']  contient des chiffres et pas de lettres ?!!!
 
:)

Message cité 1 fois
Message édité par jerkeve le 14-11-2005 à 10:55:12
n°1245032
sielfried
Posté le 14-11-2005 à 10:56:58  profilanswer
 

jerkeve a écrit :


DONC : question (la bonne !!) : comment tester si $_POST['telephone']  contient des chiffres et pas de lettres ?!!!


 
Avec is_numeric. Essaye encore.  [:spamafote]  
 
Elle est faite pour ça.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1245047
olivthill
Posté le 14-11-2005 à 11:20:45  profilanswer
 

Désolé sielfried, mais un nombre testé avec is_numeric peut contenir la lettre E. La question est de trouver un nombre entier, pas un nombre flottant. Donc is_numeric ne suffit pas.
 
Il faut faire :

function myIsInt($x) {  
   return(is_numeric($x) ? intval(0+$x) == $x : false);  
}
...
if (myIsInt($_post['telephone']) == false)
   print("Erreur, numéro de téléphone non numérique" );


mood
Publicité
Posté le 14-11-2005 à 11:20:45  profilanswer
 

n°1245056
jerkeve
Posté le 14-11-2005 à 11:34:22  profilanswer
 

:hello:  
 
En fait j'ai trouvé : ce sont les espaces saisis en début ou en milieu de chaine qui cagouillent le resultat. les gens saisissent souvent leurs telephones au format 01 34 56 67 78 par ex.  
 
Donc pour schunter il suffit de tester comme ca (pas leger mais efficace) :

Code :
  1. if(is_numeric(trim(str_replace(" ","",$_POST['teleplone']))))  { echo 'chiffre'; } else { echo 'lettre'; }


 
par contre ta fonction est effectivement interessante, olivthill, pour bloquer les virgules en plus.  
 
 
 
MERCI de vos aides et reponses  :jap:


Message édité par jerkeve le 14-11-2005 à 11:35:37
n°1245113
sielfried
Posté le 14-11-2005 à 13:24:39  profilanswer
 

olivthill a écrit :

Désolé sielfried, mais un nombre testé avec is_numeric peut contenir la lettre E. La question est de trouver un nombre entier, pas un nombre flottant. Donc is_numeric ne suffit pas.


 
Ouais, le "Comment voir si une variable de type string contient des données numériques ?" m'a fait oublier qu'il voulait des entiers spécifiquement. Reste que c'était pas normal qu'is_numeric lui balance false.
 
Sinon un petit preg_match('#^[\d\s]*$#', $texte) et pis valà.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1245222
Xav_
The only one...
Posté le 14-11-2005 à 14:45:19  profilanswer
 

ouais, je suis une quiche en regex, donc pas cap de le faire, mais je pensais que c'était une idée ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1245228
jerkeve
Posté le 14-11-2005 à 14:47:51  profilanswer
 

moi je n'aime pas trop les regex non plus : ca mange pas mal de cpu ces petites betes, donc quand je peux eviter... ;)
C'est pour ca que je cherchais autre chose ...

n°1246625
gatsusat
Posté le 16-11-2005 à 11:32:28  profilanswer
 

Pas du tout, et au contraire, les regexp ca s'avère plus rapide que du code mal branlé ou bidouillé

n°1249022
imcdb
Posté le 19-11-2005 à 18:24:21  profilanswer
 

ca devrait faire l'affaire :
 

Code :
  1. if(ereg("([a-zA-Z])",$ta_variable_postee))
  2. {
  3. action();
  4. }


---------------
Réagissez et commentez mes dessins sur snut.fr
n°1249312
jerkeve
Posté le 20-11-2005 à 15:28:56  profilanswer
 

oui, merci, effectivement il n'y a pas d'autre solution simple que les regex :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  comment tester si une variable est un entier numérique ???

 

Sujets relatifs
passer une variable sur 2 pagesNom de fichier variable
Chargement d'une feuille grace a une variableutilisation d'une variable ??
Function et variableUtilisation variable XSL
Tester si un enregistrement existe ou non.Quel est le fonction pour détecter le type variable renvoyé ? (suite)
[bash] recuperer le resultat d'une commande SQL dans une variable bashvariable de session et impression
Plus de sujets relatifs à : comment tester si une variable est un entier numérique ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR