10
votes

PHP Vérifier si l'objet peut être converti en entier?

en php, il semble que chaque objet puisse être converti en entier, juste en appelant intval ($ objet) , mais ce n'est pas ce que je veux. Ce que je veux, c'est, de vérifier si l'objet serait valide pour être converti en un entier pour ce qu'un humain pense qu'il est.

I.e., Des objets valides seraient

  • 12
  • 12.0
  • "12"
  • "12.0"

    et non valide serait

    • myfooInstance ()
    • "une chaîne"
    • "12.0.0"
    • "0 12.0"

      etc. En Python, je pourrais simplement voir les éléments suivants: xxx

      Comment puis-je y aller dans PHP?


2 commentaires

5 Réponses :


15
votes

Utilisez is_numérique .

<?php
$tests = array(
    "42", 
    1337, 
    "1e4", 
    "not numeric", 
    array(), 
    9.1
);

foreach ($tests as $element) {
    if (is_numeric($element)) {
        echo "'{$element}' is numeric", PHP_EOL;
    } else {
        echo "'{$element}' is NOT numeric", PHP_EOL;
    }
}
?>


'42' is numeric
'1337' is numeric
'1e4' is numeric
'not numeric' is NOT numeric
'Array' is NOT numeric
'9.1' is numeric


1 commentaires

Merci, ai-tu manqué ça!



-1
votes

Check out is_numeric ($ var) : http://php.net/is_numeric


0 commentaires

-1
votes

Essayez ceci xxx


2 commentaires

La condition dans si ((int) $ variable) évaluerait à false quand $ variable == 0 .


Oui, oublié que "petit" détail :)



6
votes

Entier (pas seulement numérique) Test: http://codepad.org/3e8iyhky xxx

résultats: xxx

vieux, buggy réponse http://codepad.org/loqfagnl
Échoue avec du type flotteur entier: (double) 123 xxx


1 commentaires

Merci beaucoup, mais is_numérique convient également. :)



3
votes

Voir PHP's CTYPE_DIGIT () .

Cette fonction évalue une chaîne pour voir si tout le caractère est numérique. Ainsi, "1.1" ne retournera pas true car "". " n'est pas numérique, mais " 11 ". Notez également que cela fonctionne uniquement pour les chaînes, de sorte que les chiffres sans les guillemets environnants ne fonctionneront pas non plus.


0 commentaires