Is_int对于像"-10"这样的负值返回false


is_int returns false for negative values like "-10"?

是否php的is_int函数返回false为负数,因为php中的整数是无符号的,还是有其他的行为,我错过了?我试图检查某个东西是否是一个整数,如果它正在做一些不同的事情,我不想依赖于is_int的行为(对于测试的第一部分)。

澄清:我知道is_int返回false为负数,但我问为什么因为这种行为:var_dump(intval("-10"))打印int(-10), var_dump(intval("10"))打印int(1),所以负值和正值都被认为是整数,但is_int("-10")返回false。

编辑:好的,对不起大家,我对is_int和整数的行为感到相当困惑。当我需要的是字符串上的is_numeric或整数本身上的is_int时,我正在考虑它对内容为"-10"的字符串起作用。谢谢你的帮助。

没有:

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

可能,它不是一个可以开头的数字:

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

如果是,试试is_numeric(),它是为字符串设计的。

为什么不亲自测试一下呢?

<?php
var_dump(is_int(-1));
var_dump(is_int('-1'));

生产:

bool(true)
bool(false)

use

is_int(-10)

is_int("-10")

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

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

它作为一个检查。首先,简单的is_int()函数,然后,它检查是否有非零值,如果int转换等于它的浮点数,最后,如果字符串字面上是"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)