is_numeric还是数字preg_match?

时间:2009-01-13 04:33:07

标签: php security

我在论坛上看到你不能完全信任 is_numeric()。它允许通过“0xFF”,例如允许的十六进制......

所以我的问题是你可以欺骗 is_numeric 吗?我需要使用正则表达式来正确执行吗?

5 个答案:

答案 0 :(得分:12)

以下是is_numeric()认为是数字字符串的内容:

  

数字字符串由可选符号,任意数量的数字,可选的小数部分和可选的指数部分组成。因此+ 0123.45e6是有效的数值。也允许使用十六进制表示法(0xFF),但只能使用符号,十进制和指数部分。

如果您只想检查一个字符串是否包含十进制数字0-9,您可以使用ctype_digit()

答案 1 :(得分:2)

还可以使用ctype_digit()检查是否为真数。

答案 2 :(得分:0)

正则表达式显然是你更好的选择,但它确实带来了开销。所以这取决于你的情况和你想做的事情。

答案 3 :(得分:0)

是否用于验证用户输入?然后使用正则表达式或断言它的开销不包含“x”和is_numeric()不会太多开销。

答案 4 :(得分:0)

如果您只是想检查某事是否为整数,请尝试以下方法:

function isInteger($value){
    return (is_numeric($value) ? intval($value) == $value : false);
}

如果你想检查花车那么这显然不会起作用:)