对于像“-10”这样的负值,is_int返回false?

时间:2011-08-17 16:36:48

标签: php integer

php的is_int函数是否为负数返回false,因为php中的整数是无符号的,还是有其他我缺少的行为?我正在尝试检查某些内容是否为整数,并且我不想依赖于is_int的行为(对于测试的第一部分),如果它正在做一些不同的事情。

澄清:我知道is_int会返回false的负数,但我会因为这种行为而问为什么var_dump(intval("-10"))打印{{1} }}和int(-10)打印var_dump(intval("10")),因此负值和正值都被视为整数,但int(1)返回false。

编辑:好的,对不起大家,我对is_int和整数的行为感到非常困惑。当我需要的是字符串上的is_int("-10")或者整数本身上的is_numeric时,我一直在考虑使用内容为“-10”的字符串。谢谢您的帮助。

4 个答案:

答案 0 :(得分:6)

它没有:

var_dump( is_int(-10) ); // bool(true)

可能这不是一个数字开头:

var_dump( is_int('-10') ); // bool(false)

如果是这样,请试用专为字符串设计的is_numeric()

答案 1 :(得分:3)

为什么不亲自测试一下?

<?php

var_dump(is_int(-1));
var_dump(is_int('-1'));

产生

bool(true)
bool(false)

答案 2 :(得分:1)

使用

is_int(-10)

is_int("-10")

答案 3 :(得分:0)

我知道这个问题是旧的,如果有人需要检查一个字符串是否代表一个有效的int,或者例如一个浮点数,这里是一个简单的脚本来进行验证

$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');

它可以作为支票。 Forst,简单的is_int()函数,然后,它检查非零值,如果int转换等于它的float值,最后,如果字符串字面上是“0”。

<?php
$val = 3;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 5.5;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 'hola';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '3';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '5.5';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '0';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 0;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
//bool(true) bool(false) bool(false) bool(true) bool(false) bool(true) bool(true)