% php -r 'var_dump(is_numeric("+0123.45e6"), +0123.45e6);
> var_dump(is_numeric("-0123"), -0123);'
bool(true)
float(123450000)
bool(true)
int(-83)この結果を踏まえ、is_numeric() で真となる文字列は、クォートしなかった場合 PHP のパーザで数値として評価される文字列であるという予測 *1 に基づいて、先日のエントリ (d:id:rsky:20061127:1164705790) を一部修正。
これにより、8進数や指数表記も正しく評価できるようになります。
$hex = substr($num, 2);
} elseif (is_numeric($num)) {
// numerical string
- return parse_int_cast($num);
+ return parse_int_cast(eval('return ' . $num . ';'));
} else {
return false;
} $hex = substr($num, 2);
} elseif (is_numeric($num)) {
// numerical string
- return parse_float_cast($num);
+ return parse_float_cast(eval('return ' . $num . ';'));
} else {
return false;
}*1:*予測する暇があったらソース読め