% 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:*予測する暇があったらソース読め