is_int 对于像“-10”这样的负值返回 false?

发布于 2024-11-29 20:11:55 字数 521 浏览 0 评论 0原文

php 的 is_int 函数是否对负数返回 false ,因为 php 中的整数是无符号的,还是我缺少其他行为?我正在尝试检查某些内容是否是整数,并且如果它做了不同的事情,我不想依赖 is_int (测试的第一部分)的行为。

澄清:我知道 is_int 对于负数返回 false,但我要问为什么,因为这种行为:var_dump(intval ("-10")) 打印 int(-10)var_dump(intval("10")) 打印 int(1),所以都是负数正值被视为整数,但 is_int("-10") 返回 false。

编辑:好的,对不起大家,我对 is_int 和整数的行为感到相当困惑。当我需要的是字符串上的 is_numeric 或整数本身的 is_int 时,我正在考虑它作用于具有“-10”等内容的字符串。感谢您的帮助。

Does php's is_int function return false for negative numbers because integers in php are unsigned, or is there other behaviour that I'm missing? I'm trying to check if something is a whole number, and I don't want to rely on that behaviour of is_int (for the first part of the test) if it's doing something different.

Clarification: I know that is_int returns false for negative numbers, but I'm asking why because of this behaviour: var_dump(intval("-10")) prints int(-10), and var_dump(intval("10")) prints int(1), so both negative and positive values are considered integers, yet is_int("-10") returns false.

EDIT: Ok, sorry everyone, I got quite a bit confused about the behaviour of is_int and integers in general. I was thinking of it acting on a string with contents like "-10" when what I need is is_numeric on a string, or is_int on an integer itself. Thanks for the help.

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

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

发布评论

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

评论(4

倚栏听风 2024-12-06 20:11:55

它不是:

var_dump( is_int(-10) ); // bool(true)

可能,它不是一个数字:

var_dump( is_int('-10') ); // bool(false)

如果是这样,请尝试 is_numeric() ,它是为字符串设计的。

It doesn't:

var_dump( is_int(-10) ); // bool(true)

Probably, it isn't a number to begin with:

var_dump( is_int('-10') ); // bool(false)

If so, try out is_numeric(), which is designed for strings.

过气美图社 2024-12-06 20:11:55

为什么不亲自测试一下呢?

<?php

var_dump(is_int(-1));
var_dump(is_int('-1'));

产生:

bool(true)
bool(false)

Why not test it for yourself?

<?php

var_dump(is_int(-1));
var_dump(is_int('-1'));

produces:

bool(true)
bool(false)
于我来说 2024-12-06 20:11:55

使用

is_int(-10)

is_int("-10")

use

is_int(-10)

not

is_int("-10")
一个人的夜不怕黑 2024-12-06 20:11:55

我知道这个问题很老了,但是如果有人需要检查字符串是否代表有效的 int,或者例如浮点数,这里有一个简单的脚本,可以使验证

$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');

充当检查的作用。首先,简单的 is_int() 函数,然后检查 int 转换是否等于其 float 值是否为非零值,最后检查字符串是否字面意思是“0”。

<?php
$val = 3;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 5.5;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 'hola';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '3';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '5.5';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '0';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 0;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
//bool(true) bool(false) bool(false) bool(true) bool(false) bool(true) bool(true) 

I know this question is old, bu if someone need to check if a string represents an valid int, or, for example, a float, here is a simple script that will make that validation

$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');

It works as a check. Forst, the simple is_int() function, then, it checks, for non zero values if the int conversion is equal to its float one, and finally, if the string is literally "0".

<?php
$val = 3;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 5.5;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 'hola';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '3';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '5.5';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = '0';
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
$val = 0;
$is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
var_dump($is_int);
//bool(true) bool(false) bool(false) bool(true) bool(false) bool(true) bool(true) 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文