PHP:Is_numeric在0上返回false

11

is_numeric()is_int()会在值为0时返回false。在PHP中,要验证特定的值是否只包含数字,可以使用正则表达式吗?还是已经有一些方便的功能来实现了呢?

谢谢!


4
我会尽力为您提供准确的翻译:对于我来说,“no repro”,我的is_numeric(0)返回bool(true)。同样适用于is_int - SilentGhost
2
你确定它不是字母O而不是数字0吗? - Peter Bailey
1
可能相关...不同的语言但是类似的问题:https://dev59.com/VUfRa4cB1Zd3GeqP5gfB#691278 - John Rasch
4
谢谢你给我负评。我当然已经核实了它是零分。 - Industrial
1
服务器上重新启动了PHP,现在它运行得很好。虽然不知道为什么会出现这种情况,但还是感谢大家的帮助! - Industrial
显示剩余3条评论
7个回答

7

在我的情况下,它在两种情况下都返回true:

var_dump(is_numeric(0));
var_dump(is_int(0));

结果:

bool(true)
bool(true)

1
非常奇怪。我不知道为什么我的测试(Windows)环境返回false。 - Industrial

7

整数零是空的。 因此,在检查Is_numeric()或is_int()之前,请确保没有检查空。


1
惊讶的是,那正是我正在做的事情! :) - Rahim Khoja

0

我曾经遇到过同样的问题,结果发现数字后面有一个空格。

长话短说,无论数字是多少:

is_numeric(" 0.0") --> YES
is_numeric("0.0 ") --> NO

这里是一个例子...

public function getCoordinates()
{
    return sprintf('%1$f , %2$f',$this->getLatitude(),$this->getLongitude());
}

在后续的过程中...

        $myarr = explode(",",$_ScreenCoordinates);
        echo "_ScreenCoordinates:$_ScreenCoordinates<br>";
        echo "myarr[0]:".$myarr[0]." - ".((is_numeric($myarr[0]))?"YES":"NO")."<br>";
        echo "myarr[1]:".$myarr[1]." - ".((is_numeric($myarr[1]))?"YES":"NO")."<br>";
        echo "trimmed[0]:".$myarr[0]." - ".((is_numeric(trim($myarr[0])))?"YES":"NO")."<br>";

在屏幕上打印:

Array ( [0] => 1.200000 [1] => 123.456000 )
_ScreenCoordinates:1.200000 , 123.456000
myarr[0]:*1.200000 * - NO
myarr[1]:* 123.456000* - YES
trimmed[0]:*1.200000 * - YES

0
var_dump(is_int("0"));

会返回 false,因为你将零作为字符串文字传递给它。你可以尝试将相同的内容作为变量传递,该变量已经通过(我相信)parseInt("")处理过。

虽然我的 PHP 可能有点问题,因为最近一两周一直在编写 JavaScript。


1
嗨!字符串没有作为字符串传递。 - Industrial
3
@Industrial 这是个悖论 ;) - Gordon
1
@Gordon Duuh。这绝对是名人堂上的一件事。传递的值不是字符串,而只是一个数字。我希望这样可以理解 ;) - Industrial

0

如果这个0实际上是一个布尔值FALSE,也会发生这种情况。 对于布尔值,is_numeric()总是返回FALSE


0

当你处理请求时,最好先使用filter_input检查输入。以下是一个例子,检查$_GET中的'id'。

filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)

完整的示例

if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
        $id = $_GET['id'];
} else {
        die('please input a integer');
}

好的,该功能适用于PHP版本>=5.2。


-1
if($price != 0) {
    if(is_numeric($price)) {
        $price = $price; // numeric
    } else { // is not numeric }
} else {
    $price = $price; // 0 as numeric
}

1
请格式化您的答案,并且您真的不需要回答一个已经有被接受的答案的7年前的问题。 - S4NDM4N
1
这个答案不仅毫无意义,而且还存在语法错误。 - Antti29

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接