comment tester si une variable est un entier numérique ??? - PHP - Programmation
Marsh Posté le 14-11-2005 à 02:12:14
isnumeric ?
http://fr.php.net/tafonction
ou sinon rechercher un peu sur google
Marsh Posté le 14-11-2005 à 09:41:41
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 ?
Marsh Posté le 14-11-2005 à 09:55:32
en cherchant sur le manuel de PHP :
Citation :
|
Marsh Posté le 14-11-2005 à 10:33:26
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 :
|
Marsh Posté le 14-11-2005 à 10:34:40
olivthill a écrit :
|
elle reprend le is_numeric ta fonction hein
Marsh Posté le 14-11-2005 à 10:44:19
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.
Marsh Posté le 14-11-2005 à 10:51:03
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 :
|
Ensuite récupérez la variable $_POST['telephone'] sur une page test.php, et testez son type :
Code :
|
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 ?!!!
Marsh Posté le 14-11-2005 à 10:56:58
jerkeve a écrit : |
Avec is_numeric. Essaye encore.
Elle est faite pour ça.
Marsh Posté le 14-11-2005 à 11:20:45
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) { |
Marsh Posté le 14-11-2005 à 11:34:22
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 :
|
par contre ta fonction est effectivement interessante, olivthill, pour bloquer les virgules en plus.
MERCI de vos aides et reponses
Marsh Posté le 14-11-2005 à 13:24:39
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à.
Marsh Posté le 14-11-2005 à 14:45:19
ouais, je suis une quiche en regex, donc pas cap de le faire, mais je pensais que c'était une idée
Marsh Posté le 14-11-2005 à 14:47:51
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 ...
Marsh Posté le 16-11-2005 à 11:32:28
Pas du tout, et au contraire, les regexp ca s'avère plus rapide que du code mal branlé ou bidouillé
Marsh Posté le 19-11-2005 à 18:24:21
ca devrait faire l'affaire :
Code :
|
Marsh Posté le 20-11-2005 à 15:28:56
oui, merci, effectivement il n'y a pas d'autre solution simple que les regex
Marsh Posté le 14-11-2005 à 01:14:43
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