我在论坛上看到说不能完全信任 is_numeric()。例如它会让 "0xFF" 这样的十六进制数通过...
所以我的问题是,你能够欺骗 is_numeric 吗?我需要使用正则表达式才能正确处理吗?
is_numeric()函数认为以下字符串是数字:
数字字符串可以包含可选符号、任意数量的数字、可选小数部分和可选指数部分。因此,+0123.45e6 是一个有效的数字值。十六进制表示法(0xFF)也是被允许的,但是只能没有符号、小数和指数部分。
如果你只想检查一个字符串是否只由十进制数字0-9组成,你可以使用ctype_digit()函数。
正则表达式显然是更好的选择,但它会带来额外的开销。因此,这真的取决于您的情况和您想要做什么。
这是用于验证用户输入吗?那么使用正则表达式或断言它不包含“x”并且 is_numeric() 的开销不会太大。
function isInteger($value){
return (is_numeric($value) ? intval($value) == $value : false);
}
return is_numeric( $value ) && intval( $value ) == $value
?更易读。 - Rob