阅读B
B (新):
我需要验证变量是否为整数,我已经尝试了所有可用的内置函数或有用的提示,但唯一最好的解决方案是regex
我不想要利用这个时间。
filter_var
也不是最好的,因为它也会过滤数据,但我只想验证它。
123
-123
'123'
'-123'
这些输入仅为true
,false
否则为
我尝试了很多不同的选择:
ctype_digit("-123"); // false - doesn't work
is_int('123'); // false
filter_var(' 123 ', FILTER_VALIDATE_INT) !== false; // true - doesn't work
A (旧):
我会给出一个简单的例子:
$a = "\n \t 34 3"; // string(9)
$aint = intval($a); // int(34)
var_dump($a == $aint);
结果:
bool(true)
叫我noob,但你能告诉我为什么/这些变量如何通过均衡测试?
我想要达到的目的是检查'1989'
等于1989
是否属实,但不是任何其他情况。例如:'1989 '
不应通过测试。另外,我不想使用regex
。
答案 0 :(得分:1)
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。
参考文献:
http://php.net/manual/en/language.operators.comparison.php http://php.net/manual/en/language.types.string.php#language.types.string.conversion
答案 1 :(得分:0)
以下简单技巧可行(123 * 123 = 15129)。
function checkInt($n) {
return $n*$n==15129;
}
对于'123',' - 123',123和-123,这将返回true,并且对于所有其他输入$ n将返回false。
答案 2 :(得分:0)
试试这个
function isInteger($value) {
if (!is_numeric($value)) {
return false;
}
$i = (int)$value;
return ($value == $i);
}
$nums = array(123, -123, '123', '-123', '123test', ' 123 ', '\n \t 34 3');
foreach($nums as $key => $num) {
$result = isInteger($num);
printf("isInteger: %d, %s\n", $result, $num);
}
输出:
isInteger: 1, 123
isInteger: 1, -123
isInteger: 1, 123
isInteger: 1, -123
isInteger: 0, 123test
isInteger: 0, 123
isInteger: 0, \n \t 34 3
答案 3 :(得分:0)
我想感谢你们所有的时间,帮助。
我想出了解决方案:
$filtered = filter_var($var, FILTER_VALIDATE_INT);
return $filtered !== false && (string) $filtered == $var;
这是最佳解决方案。