PHP intval() comportement?
Cela semble étrange pour moi:
$test_1 = 'string';
$test_2 = '0';
var_dump(intval($test_1)); //Output: int 0
var_dump(intval($test_2)); //Output: int 0
$can_cast = intval($test_2) ? 'sure' : 'nope'; //Wrong!!!
Donc avec un string
à int
conversion intval
retourne 0. Très bien, mais il renvoie 0 aussi, quand la chaîne peut être coulé à zéro (car est zéro) donc valide.
Comment peut-on peut faire la distinction entre les deux (ce qui permet de " 0 " en tant que chaîne et refuser 'string')?
MODIFIER: ok permettez-moi de dire que je sais que je peux utiliser is_numeric
. But is_numeric('2.3')
retourne true
, on ne peut pas l'aider. Et:
$test = '0';
var_dump(is_numeric($test) && intval($test)); //Fail!!!
is_numeric()
pourrait être bon pour vous?Qu'en est
'0.0'
, '0.1'
ou '0foo'
?j'ai édité la question, vous avez le point.
Qu'entendez-vous par "Fail!!!" pour le is_numeric exemple? C'est faux, comme prévu, à droite?
intval est une conversion, de ne pas vérifier, de sorte qu'il renvoie toujours un entier. Ainsi, il est impossible de savoir à partir de intval si l'argument est de type entier ou pas - c'est pas fait pour ça.
OriginalL'auteur Polmonino | 2011-12-18
Vous devez vous connecter pour publier un commentaire.
Vous pourriez faire un
ctype_digit
vérifier avant de lancer (si vous ne souhaitez que des nombres positifs). Sinon, vous pourriez faire un nombre entier de validation à l'aide defilter_var
etFILTER_VALIDATE_INT
. La validation entier sera également vérifier entier de la sémantique, c'est à dire s'assurer que l'entier est dans la plage autorisée. Vous pouvez également le personnaliser pour répondre à vos besoins grâce à plusieurs options.ctype_digit
fonctionne comme prévu.OriginalL'auteur NikiC