php验证整数[更新]

时间:2014-08-24 21:41:46

标签: php equality

阅读B

B (新)

我需要验证变量是否为整数,我已经尝试了所有可用的内置函数或有用的提示,但唯一最好的解决方案是regex我不想要利用这个时间。

filter_var也不是最好的,因为它也会过滤数据,但我只想验证它。

123
-123
'123'
'-123'

这些输入仅为truefalse否则为

我尝试了很多不同的选择:

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

4 个答案:

答案 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

Live test

答案 3 :(得分:0)

我想感谢你们所有的时间,帮助。

我想出了解决方案:

$filtered = filter_var($var, FILTER_VALIDATE_INT);
return $filtered !== false && (string) $filtered == $var;

这是最佳解决方案。