为什么将字符串转换为整数不起作用?

时间:2018-02-21 17:34:35

标签: php casting int

//编辑: 最终目标是检测用户提交的值是字符串还是整数。因为该值是从表单输入中获取的,所以即使提供的值是整数,它也会被转换为字符串。

我正在执行一个简单的比较来检测字符串变量是否等于其整数值。该值从HTML表单字段传递。

当字符串值为单个字母时,它的计算结果为true,不应该为。

if ( ($val == (int)$val ) && strlen( $val ) == strlen( (int)$val ) ){
}

我也尝试使用intval()而不是转换int变量类型。

它始终评估为真。但是r没有== 0,那怎么会这样呢?

$val = 'r'; 
echo 'Does $val = (int)$val? ' . ($val == (int)$val);

echo '<br/><br/>';
echo '$val was: ' . $val . '<br/>';
echo '(int)$val was: ' . (int)$val;

输出:

Does $val = (int)$val? 1

$val was: r
(int)$val was: 0

2 个答案:

答案 0 :(得分:3)

要检查字符串是否实际上是一个数字,我会使用类似的东西:

if (strval(intval($val, 10)) == $val)

注意:这将仅检测具有整数的字符串,还有is_numeric适用于十进制和指数(如+0123.45e6)。

注2:is_int检测实际的变量类型,因此对于"123",它将返回false,因为它是字符串。

注意3:当您使用+前缀+123提交号码时,您可能会遇到问题 - 是否要支持此类案例取决于您

答案 1 :(得分:3)

要检查您的字符串是否实际上是一个数字(根据您的评论,这是您想要的),您不必一起修改一些自定义测试。 PHP为此提供了内置函数:

if(is_numeric($val)) {
    //do integer stuff
} else {
    //do string stuff
}