[英]unable to determine if a string is currently an integer or not
The following funciton drove me nuts. 以下功能使我发疯。 How on earth 100x could be equal to 100 and then 100x is reported as an integer? 地球上的100x如何等于100,然后将100x报告为整数?
For the life of me, I cannot figure it out. 对于我的一生,我无法弄清楚。 You can copy and paste the whole thing and see it for yourself. 您可以复制并粘贴整个内容,然后自己查看。
I'm missing a simple point somewhere here, help me out guys. 我在这里某处缺少一个简单的要点,请大家帮帮我。
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>";
}
the above code, when run returns the following; 上面的代码,运行时返回以下内容;
val: 100 is being checked to see if it's an integer or not
orgval: 100
num: 100
YES IT IS. the [100] is equal to [100]
100 is an integer!
val: 100x is being checked to see if it's an integer or not
orgval: 100x
num: 100
YES IT IS. the [100x] is equal to [100]
100x is an integer!
I can remedy the situation by adding the following bits 我可以通过添加以下内容来纠正这种情况
if (!is_numeric($val))
{
return false;
}
to the top of the blp_int function right off the bat but,.. I'm still super curious to find out why on earth php thinks 100x=100 are equals. 马上就到了blp_int函数的顶部,但是,..我仍然非常想知道为什么地球上php认为100x = 100是相等的。
As you can see in this example , casting 100x
as an integer converts it to 100
. 如本例所示 ,将100x
转换为整数会将其转换为100
。 Since you are not using strict comparison , '100x' == 100
is true. 由于未使用严格比较 ,因此'100x' == 100
为true。 PHP removes the x
from it to make just 100
. PHP从中删除x
,得到100
。
You could use strict comparison (which also compares the types), such that '100x' === 100
would return false. 您可以使用严格比较(也可以比较类型),这样'100x' === 100
将返回false。 Using it, any time a string was compared to an integer, it would return false. 使用它,每当将字符串与整数进行比较时,它将返回false。
As per your edit: is_numeric
may not be the most reliable, as it will return true for numbers formatted as a string, such as '100'
. 根据您的编辑: is_numeric
可能不是最可靠的,因为它将对格式化为字符串的数字(例如'100'
返回true。 If you want the number to be an integer (and never a string), you could use is_integer
instead. 如果希望数字为整数 (而不是字符串),则可以使用is_integer
。 I'm not quite sure what exactly you're doing, but i thought I'd add this note. 我不太确定您到底在做什么,但我想我要添加此注释。
I think you should use three equal signs in your IF: 我认为您应该在IF中使用三个等号:
if ($orgval===$num) {
Otherwise PHP casts the value 100x
to 100
and 100=100
. 否则,PHP将值100x
强制转换为100
并且100=100
。
What kind of check do you want to do? 您要做什么支票? There are a few ways you could go about it: 有几种方法可以解决:
if (preg_match('!^[0-9]+$!', $input))
if (intval($input) == $input)
if (intval($input) === $input)
if ('x'.intval($input) === 'x'.$input)
It depends on how closely you want to check if it's an integer. 这取决于您要检查它是否为整数的紧密程度。 Does it matter if you need to trim()
it first? 是否需要首先trim()
它有关系吗?
Either cast it to an int
or try http://php.net/manual/en/function.ctype-digit.php . 可以将其强制转换为int
或尝试http://php.net/manual/en/function.ctype-digit.php 。 You also need ===
in your if. 如果还需要===
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.