10
votes

Php: is_numeric retourne faux sur 0

is_numeric () ainsi que is_int () renvoie false si la valeur est 0. Que puis-je faire plutôt pour vérifier qu'une valeur spécifique n'est que dans PHP ?

Est-ce que nous nous dirigeons tout droit sur le camp d'expressions régulières ou y a-t-il une belle fonctionnalité pratique pour cela déjà?

merci!


8 commentaires

Pas de reproduction, is_numeric (0) retourne bool (vrai) pour moi. la même chose avec is_int


@Industrial: Êtes-vous sûr? ideone.com/h5csa


Vous êtes sûr que ce n'est pas une lettre o au lieu d'un zéro?


Je suis vrai sur les deux si j'utilise $ var = 0; - Mind affichant du code?


Éventuellement lié ... langage différent mais problème similaire: Stackoverflow.com/Questtions/691199/c-Parse-String-0-a-Iserg ER / ...


@Industrial: Quelle version de PHP utilisez-vous? Certaines versions plus anciennes pourraient être correctement renvoyées.


Merci de m'avoir votté. J'ai bien sûr vérifié que c'est un 0 (zéro) d'abord.


Redémarrez PHP sur le serveur et cela fonctionne bien maintenant. N'ont aucune idée de la raison pour laquelle cela se produisait. Merci tout le monde pour leur aide!


7 Réponses :


6
votes

Cela me rend vrai pour moi dans les deux cas: xxx

résultat: xxx


1 commentaires

Très étrange. Vous n'avez aucune idée de la raison pour laquelle mon environnement de test (Windows) retourne faux.



0
votes
var_dump(is_int("0"));
Will pass false because you are passing it the zero as a string literal.  You could try passing the same thing as a variable which has gone through (I believe) parseInt("");Though my php may be a little off, having been Javascripting nonstop the last week or two.

3 commentaires

Salut! La chaîne n'est pas passée comme une chaîne.


@Industrial c'est un paradoxe;)


@Gordon Duh. C'était un pour le mur de la gloire définitivement. La valeur qui est passée n'était pas une chaîne, mais seulement un nombre. J'espère que cela le rendit compréhensible;)



5
votes

zéro, comme un entier est vide. Assurez-vous donc qu'il n'y a pas de chèque pour Vide avant de vérifier IS_Numeric () ou IS_INT ()


1 commentaires

Merci! Étonnamment c'est exactement ce que je faisais! :)



0
votes

Lorsque vous faites face à la demande, vérifiez d'abord l'entrée en utilisant Filter_Input. Voici un exemple de contrôle 'ID' à partir de $ _GET.

if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
        $id = $_GET['id'];
} else {
        die('please input a integer');
}


0 commentaires

0
votes

J'ai mûr au même problème, et cela a eu lieu qu'il y avait un espace après le numéro.

Longue histoire courte, quel que soit le numéro: p>

Array ( [0] => 1.200000 [1] => 123.456000 )
_ScreenCoordinates:1.200000 , 123.456000
myarr[0]:*1.200000 * - NO
myarr[1]:* 123.456000* - YES
trimmed[0]:*1.200000 * - YES


0 commentaires

0
votes

Ceci peut aussi se produire si ce 0 est un faux en fait. is_numeric () retourne toujours false pour boolean.


0 commentaires

0
votes
if($price != 0) {
    if(is_numeric($price)) {
        $price = $price; // numeric
    } else { // is not numeric }
} else {
    $price = $price; // 0 as numeric
}

2 commentaires

Formatez votre réponse correctement et vous n'avez vraiment pas besoin de répondre à une question de 7 ans qui a une réponse acceptée.


Non seulement cette réponse n'a aucun sens, il y a une erreur de syntaxe pour démarrer.