is_numeric() & eval()

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