Php 无法确定字符串当前是否为整数

Php 无法确定字符串当前是否为整数,php,isnumeric,isinteger,Php,Isnumeric,Isinteger,下面的功能把我逼疯了。100x究竟如何等于100,然后100x被报告为整数? 就我个人而言,我无法理解。 您可以复制和粘贴整个内容,并亲自查看。 我在这里遗漏了一点,帮帮我,伙计们 function blp_int($val) { $orgval = $val; $num = (int)$val; echo "<li><font color=red>val: ". $val . " is being checked to see if it

下面的功能把我逼疯了。100x究竟如何等于100,然后100x被报告为整数?
就我个人而言,我无法理解。 您可以复制和粘贴整个内容,并亲自查看。
我在这里遗漏了一点,帮帮我,伙计们

function blp_int($val) {
    $orgval = $val;
    $num = (int)$val;    
    echo "<li><font color=red>val: ". $val . " is being checked to see if it's an integer or not";
    echo "<li><font color=red>orgval: ". $orgval ;
    echo "<li><font color=red>num: ". $num ;
    if ($orgval==$num) {
        echo "<li><font color=red><b>YES IT IS! the [{$orgval}] is equal to [{$num}]</b>";
        return true;
    }
    return false;
}

if (blp_int("100"))
{
    echo "<h1>100 is an integer!</h1>";
}
else
{
    echo "<h1>100 is NOT an integer!</h1>";
}

if (blp_int("100x"))
{
    echo "<h1>100x is an integer!</h1>";
}
else
{
    echo "<h1>100x is NOT an integer!</h1>";
}
我可以通过添加以下内容来纠正这种情况

    if (!is_numeric($val))
    {
        return false;
    }

到blp_int函数的顶部,但是,。。我仍然非常好奇地想知道为什么php认为100x=100是相等的。

要么将其转换为
int
,要么试试。您还需要在if中使用
==

将其强制转换为
int
或重试。您还需要在if中使用
==

我认为您应该在if中使用三个等号:

if ($orgval===$num) {
否则,PHP将值
100x
强制转换为
100
100=100


我认为你应该在IF中使用三个等号:

if ($orgval===$num) {
否则,PHP将值
100x
强制转换为
100
100=100

如中所示,将
100x
转换为整数将其转换为
100
。由于您没有使用严格比较,
'100x'==100
。PHP从中删除
x
,使其成为
100

您可以使用严格比较(也比较类型),这样
'100x'==100
将返回false。使用它,任何时候将字符串与整数进行比较时,它都会返回false


根据您的编辑:
是数字的
可能不是最可靠的,因为对于格式化为字符串的数字,例如
'100'
,它将返回true。如果希望数字是一个整数(而不是字符串),可以使用
is\u integer
。我不太清楚你到底在做什么,但我想我应该加上这个注释。

正如你在中看到的,将
100x
转换为整数将其转换为
100
。由于您没有使用严格比较,
'100x'==100
。PHP从中删除
x
,使其成为
100

您可以使用严格比较(也比较类型),这样
'100x'==100
将返回false。使用它,任何时候将字符串与整数进行比较时,它都会返回false



根据您的编辑:
是数字的
可能不是最可靠的,因为对于格式化为字符串的数字,例如
'100'
,它将返回true。如果希望数字是一个整数(而不是字符串),可以使用
is\u integer
。我不太清楚你到底在做什么,但我想我应该加上这张便条。

你想做什么样的检查?有几种方法可以解决这个问题:

if (preg_match('!^[0-9]+$!', $input))

if (intval($input) == $input)

if (intval($input) === $input)

if ('x'.intval($input) === 'x'.$input)

这取决于您要检查它是否为整数的程度。如果您需要先修剪()它,这有关系吗?

您想做什么样的检查?有几种方法可以解决这个问题:

if (preg_match('!^[0-9]+$!', $input))

if (intval($input) == $input)

if (intval($input) === $input)

if ('x'.intval($input) === 'x'.$input)

这取决于您要检查它是否为整数的程度。如果您需要先修剪(trim()它有关系吗?

is\u int
ctype\u digit
filter\u var($string,filter\u VALIDATE\u int)
,后者可以不允许/允许十六进制和八进制整数。如果要使用代码,请将大小写转换为int,然后返回到string:
If((string)$orgval==(string)(int)$orgval)
您的函数使用
echo
return
,请尝试不要以这种方式编写函数。输出是什么?我的意思是当
echo
整型前后的变量时,你在屏幕上看到的是,
是int
ctype\u digit
filter\u var($string,filter\u VALIDATE\u int)
,后者可以不允许/允许十六进制和八进制整型。如果要使用代码,请将大小写转换为int,然后返回到string:
If((string)$orgval==(string)(int)$orgval)
您的函数使用
echo
return
,请尝试不要以这种方式编写函数。输出是什么?我的意思是当
echo
int转换前后的变量时,你在屏幕上看到了什么?编写一个函数(可能称之为“is_this_integer($v)”)的最佳方法是什么?当$v传递给它时,它返回true,肉眼看似乎是一个整数?因此,不仅1或-1,而且像“1”或“1”或“-1”或“-1”这样的字符串都将返回true,不用说100x或“100x”将不会作为整数返回。编写一个函数(可能称之为“is this_integer($v)”)的最佳方法是什么,当$v传递给它时,它会在肉眼看来是整数时返回true?因此,不仅1或-1,而且像'1'或'1'或'-1'或'-1'这样的字符串都将返回true,不用说100x或'100x'将不会作为整数返回。