无法确定字符串当前是否为整数

时间:2012-02-29 19:34:26

标签: php isnumeric isinteger

以下功能让我疯狂。地球上100x如何等于100然后100x报告为整数? 对于我的生活,我无法弄清楚。 您可以复制并粘贴整个内容并亲自查看 我在这里错过了一个简单的点,帮帮我们。

function blp_int($val) {
    $orgval = $val;
    $num = (int)$val;    
    echo "<li><font color=red>val: ". $val . " is being checked to see if it's an integer or not";
    echo "<li><font color=red>orgval: ". $orgval ;
    echo "<li><font color=red>num: ". $num ;
    if ($orgval==$num) {
        echo "<li><font color=red><b>YES IT IS! the [{$orgval}] is equal to [{$num}]</b>";
        return true;
    }
    return false;
}

if (blp_int("100"))
{
    echo "<h1>100 is an integer!</h1>";
}
else
{
    echo "<h1>100 is NOT an integer!</h1>";
}

if (blp_int("100x"))
{
    echo "<h1>100x is an integer!</h1>";
}
else
{
    echo "<h1>100x is NOT an integer!</h1>";
}

以上代码,运行时返回以下内容;

val: 100 is being checked to see if it's an integer or not
orgval: 100
num: 100
YES IT IS. the [100] is equal to [100]
100 is an integer!

val: 100x is being checked to see if it's an integer or not
orgval: 100x
num: 100
YES IT IS. the [100x] is equal to [100]
100x is an integer!

我可以通过添加以下位来补救这种情况

    if (!is_numeric($val))
    {
        return false;
    }

直接关闭blp_int函数的顶部,但是,..我仍然超级好奇,找出为什么在地球上php认为100x = 100等于。

4 个答案:

答案 0 :(得分:2)

正如您在this example中所看到的,将100x转换为整数会将其转换为100。由于您未使用严格比较,因此'100x' == 100为真。 PHP从中移除x以仅生成100

您可以使用严格比较(也比较类型),这样'100x' === 100将返回false。使用它,每次将字符串与整数进行比较时,都会返回false。


根据您的修改: is_numeric可能不是最可靠的,因为对于格式化为字符串的数字(例如'100'),它将返回true。如果您希望数字为整数(绝不是字符串),则可以使用is_integer代替。我不太清楚你究竟在做什么,但我想我会添加这个音符。

答案 1 :(得分:1)

我认为你应该在IF中使用三个等号:

if ($orgval===$num) {

否则PHP会将值100x转换为100100=100

Documentation: Comparison Operators

答案 2 :(得分:1)

你想做什么样的检查?有几种方法可以解决它:

if (preg_match('!^[0-9]+$!', $input))

if (intval($input) == $input)

if (intval($input) === $input)

if ('x'.intval($input) === 'x'.$input)

这取决于你想要检查它是否是一个整数的接近程度。如果你需要首先trim()它是否重要?

答案 3 :(得分:0)

将其投放到int或尝试http://php.net/manual/en/function.ctype-digit.php。你的if。

还需要===