以下功能让我疯狂。地球上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>";
}
以上代码,运行时返回以下内容;
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!
我可以通过添加以下位来补救这种情况
if (!is_numeric($val))
{
return false;
}
直接关闭blp_int函数的顶部,但是,..我仍然超级好奇,找出为什么在地球上php认为100x = 100等于。
答案 0 :(得分:2)
正如您在this example中所看到的,将100x
转换为整数会将其转换为100
。由于您未使用严格比较,因此'100x' == 100
为真。 PHP从中移除x
以仅生成100
。
您可以使用严格比较(也比较类型),这样'100x' === 100
将返回false。使用它,每次将字符串与整数进行比较时,都会返回false。
根据您的修改: is_numeric
可能不是最可靠的,因为对于格式化为字符串的数字(例如'100'
),它将返回true。如果您希望数字为整数(绝不是字符串),则可以使用is_integer
代替。我不太清楚你究竟在做什么,但我想我会添加这个音符。
答案 1 :(得分:1)
我认为你应该在IF中使用三个等号:
if ($orgval===$num) {
否则PHP会将值100x
转换为100
和100=100
。
答案 2 :(得分:1)
你想做什么样的检查?有几种方法可以解决它:
if (preg_match('!^[0-9]+$!', $input))
if (intval($input) == $input)
if (intval($input) === $input)
if ('x'.intval($input) === 'x'.$input)
这取决于你想要检查它是否是一个整数的接近程度。如果你需要首先trim()
它是否重要?
答案 3 :(得分:0)
将其投放到int
或尝试http://php.net/manual/en/function.ctype-digit.php。你的if。
===