PHP:Is_numeric 在 0 上返回 false

发布于 2024-08-31 13:40:39 字数 1469 浏览 5 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

狼性发作 2024-09-07 13:40:39

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

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

结果:

bool(true)
bool(true)

It is returning true for me in both cases:

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

Result:

bool(true)
bool(true)
反差帅 2024-09-07 13:40:39

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

Zero, as an integer is empty.
So ensure that there is no check for empty before you check for Is_numeric() or is_int()

流绪微梦 2024-09-07 13:40:39
var_dump(is_int("0"));

将传递 false,因为您将零作为字符串文字传递给它。您可以尝试将相同的内容传递为已经经过(我相信)parseInt(""); 的变量。

虽然我的 php 可能有点不对劲,但过去一两周我一直在不停地写 Javascript。

var_dump(is_int("0"));

Will pass false because you are passing it the zero as a string literal. You could try passing the same thing as a variable which has gone through (I believe) parseInt("");

Though my php may be a little off, having been Javascripting nonstop the last week or two.

怀中猫帐中妖 2024-09-07 13:40:39

当您处理 REQUEST 时,最好首先使用 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。

When you are dealing with REQUEST is better check the input first by using filter_input. Here is an example check 'id' from $_GET.

filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)

the full example

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

Well, the feature come up with version PHP >= 5.2.

折戟 2024-09-07 13:40:39

我在同样的问题上苦苦挣扎,碰巧数字后面有一个空格。

长话短说,无论数字是什么:

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

I struggeled on the same problem, and it happenned that there was a space after the number.

Long Story short, what ever the number is:

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

Here is an example...

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

Later in the process...

        $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>";

Printed on screen:

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
深府石板幽径 2024-09-07 13:40:39

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

This also can happen if this 0 is a boolean FALSE in fact.
is_numeric() always returns FALSE for boolean.

2024-09-07 13:40:39
if($price != 0) {
    if(is_numeric($price)) {
        $price = $price; // numeric
    } else { // is not numeric }
} else {
    $price = $price; // 0 as numeric
}
if($price != 0) {
    if(is_numeric($price)) {
        $price = $price; // numeric
    } else { // is not numeric }
} else {
    $price = $price; // 0 as numeric
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文