2012-02-29 82 views
2

下面的函数使我疯狂。 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

'is_int','ctype_digit','filter_var($ string,FILTER_VALIDATE_INT)',如果需要,后者可以禁止/允许十六进制和八进制整数。如果你想使用你的代码,大小写为int,但是返回字符串:'if((string)$ orgval ==(string)(int)$ orgval)' – Wrikken 2012-02-29 19:38:36

+0

你的函数使用'echo'和'return',尽量不要用这种方式写函数。输出是什么?我的意思是当在int转换之前和之后'回显变量时,你在屏幕上看到了什么? – 2012-02-29 19:39:39

回答

2

正如你可以看到this example,铸造100x为整数它转换为100。由于您未使用严格比较,'100x' == 100属实。 PHP将x从中删除,仅制作100

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


根据您的编辑:is_numeric未必是最可靠的,因为它会为格式化为一个字符串的数字返回true,如'100'。如果你想要的数字是一个整数(而不是一个字符串),你可以使用is_integer来代替。我不太确定你在做什么,但我想我会添加这个笔记。

+0

除此之外,“100'=== 100'也是错误的。 – Wrikken 2012-02-29 19:47:20

+0

编写一个函数的最好方法是什么(可能称之为“is_this_integer($ v)”),当$ V传递给它时,它返回true *看起来像是一个肉眼整数?所以,不仅是1或-1,而且还有诸如'1'或'1'或'-1'或'-1'的字符串都将返回true,并且不用说100x或'100x'将不会返回为整数。 – 2012-03-03 14:34:24

1

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

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

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

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

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

这取决于你希望检查它是否是一个整数。如果您首先需要trim(),这有什么关系吗?

相关问题