在PHP中,似乎每个对象都可以通过调用intval($object)
转换为整数,但这不是我想要的。我想要的是,检查对象是否有效转换为人类认为的整数。
即,有效的对象将是
12
12.0
"12"
"12.0"
无效将是
MyFooInstance()
"some string"
"12.0.0"
"0 12.0"
等。 在python中,我可以简单地进行以下操作:
try:
int(var)
except (TypeError, ValueError):
return False
return True
我如何在PHP中实现这一目标?
答案 0 :(得分:12)
使用is_numeric。
<?php
$tests = array(
"42",
1337,
"1e4",
"not numeric",
array(),
9.1
);
foreach ($tests as $element) {
if (is_numeric($element)) {
echo "'{$element}' is numeric", PHP_EOL;
} else {
echo "'{$element}' is NOT numeric", PHP_EOL;
}
}
?>
'42' is numeric
'1337' is numeric
'1e4' is numeric
'not numeric' is NOT numeric
'Array' is NOT numeric
'9.1' is numeric
(来自页面)
答案 1 :(得分:5)
整数(不仅仅是数字)测试: http://codepad.org/3E8IYHKY
function to_int_or_null( $v ){
if( is_int( $v )) return $v;
if( is_float( $v )) return $v === (float)(int)$v ? (int)$v : null;
if( is_numeric( $v )) return to_int_or_null( +$v );
return null;
}
结果:
int(1) int(1)
float(1) int(1)
float(-0) int(0)
string(2) "-1" int(-1)
string(2) "+1" int(1)
string(1) "1" int(1)
string(2) " 1" int(1)
string(2) "01" int(1)
string(3) " 01" int(1)
string(4) " -01" int(-1)
string(3) "1e0" int(1)
string(4) "1.00" int(1)
string(18) "1.0000000000000001" int(1)
string(18) "0.0000000000000001" NULL
string(17) "1.000000000000001" NULL
string(4) "1.11" NULL
string(4) "1e40" NULL
string(6) "1e9999" NULL
float(1.1100000000000000977) NULL
float(1.0000000000000000304E+40) NULL
float(INF) NULL
string(4) "0xFF" NULL or int(255) !!!
string(6) "0b1111" NULL
string(5) "123 " NULL
string(0) "" NULL
string(2) " " NULL
string(6) "123foo" NULL
string(6) "foo456" NULL
string(3) "foo" NULL
bool(true) NULL
bool(false) NULL
NULL NULL
array(0) {} NULL
object(stdClass)#7 (0) {} NULL
陈旧的错误答案
http://codepad.org/LoqfAgNl
使用整数值浮点类型失败:(double)123
function is_integerable( $v ){
return is_numeric($v) && +$v === (int)(+$v);
}
答案 2 :(得分:1)
请参阅PHP的ctype_digit()。
此函数计算字符串以查看是否所有字符都是数字。因此true
不会返回"."
,因为"11"
不是数字,但@ECHO OFF
FOR /R %%I IN (Vali*.dll,Vali.*.exe) DO (
(ECHO %%I | FINDSTR /I "TEST" > NUL) || (
ECHO %%I
)
)
会。另请注意,这仅适用于字符串,因此没有周围引号的数字也不起作用。
答案 3 :(得分:-1)
结帐is_numeric($var)
:http://php.net/is_numeric
答案 4 :(得分:-1)
试试这个
if((int)$variable) {...