Php 无法确定字符串当前是否为整数
下面的功能把我逼疯了。100x究竟如何等于100,然后100x被报告为整数?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
就我个人而言,我无法理解。 您可以复制和粘贴整个内容,并亲自查看。
我在这里遗漏了一点,帮帮我,伙计们
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'将不会作为整数返回。