//编辑: 最终目标是检测用户提交的值是字符串还是整数。因为该值是从表单输入中获取的,所以即使提供的值是整数,它也会被转换为字符串。
我正在执行一个简单的比较来检测字符串变量是否等于其整数值。该值从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
答案 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
}