我正在检查一个变量:
if (empty($num) || !isset ($num) || !is_numeric ($num))
{
$population = -1;
}
else
{
$population = $num;
}
我希望的是,如果num为null或不是数字或不存在,则使$ population = -1,而在所有其他情况下,为$ population赋予$ num
的值但这对我来说并非发生。任何想法为什么这不符合我的想法呢?
答案 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;
}
您将获得所需的结果。
答案 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
。