确定值是否为数字的问题

时间:2011-06-23 01:35:32

标签: php

我正在检查一个变量:

if (empty($num) || !isset ($num) || !is_numeric ($num))
{
    $population = -1;
}
else
{
    $population = $num;
}

我希望的是,如果num为null或不是数字或不存在,则使$ population = -1,而在所有其他情况下,为$ population赋予$ num

的值

但这对我来说并非发生。任何想法为什么这不符合我的想法呢?

6 个答案:

答案 0 :(得分:1)

发布$num

的示例

使用正则表达式:

$population  = preg_match("/^\d+$/", $num) ? $num : -1; 

答案 1 :(得分:1)

is_numeric本身应该运作良好。如果值$num代替$population = is_numeric ($num) ? $num : -1; // or $population = isset($_GET['num']) && is_numeric($_GET['num']) ? $num : -1; 超级全局,则使用isset最好避免警告:

{{1}}

答案 2 :(得分:1)

我会在这里说出你输入的数字0并得到意想不到的结果,因为empty(0)true

我认为如果您将代码更改为:

if (!isset ($num) || !is_numeric ($num))
{
    $population = -1;
}
else
{
    $population = $num;
}

您将获得所需的结果。

编辑可能您正在寻找整数或浮点数,在这种情况下,您应分别将is_numeric替换为is_intis_float

答案 3 :(得分:1)

这可能是范围界定的问题吗?

<?php
$num=23;
tryStuff();

function tryStuff(){

    global $num; //if this line is commented out, then -1 is printed. 
    if (empty($num) || !isset ($num) || !is_numeric ($num))
    {
        $population = -1;
    }
    else
    {
        $population = $num;
    }
    echo "$population<br>";
}
?>

答案 4 :(得分:0)

为什么不将它翻转并以积极的方式作为主要支票?

$population = (isset($num) && is_numeric($num)) ? $num : -1;

我从来没有对负面和“或”声明感兴趣:)

答案 5 :(得分:0)

如果var_dump($num);会怎样?

就我个人而言,我的猜测是PHP正在将输入解释为数字,当你期望它是一个字符串时。这些示例可能包括可能意外转换的内容,例如'0xFF'(一个Hex为255的字符串)。

显然问题不在于isset,因为如果是,你会抓住它,并且你说要发展即使没有空也会发生这种情况。这意味着您期望is_numeric($num) === FALSE的某些内容可以评估为TRUE