PHP is_numeric - false when Exponent in string -
<?php $val = '245e1'; var_dump($val); // return string(5) "245e1" $n = is_numeric($val); var_dump($n); // return bool(true)
problem: is_numeric return true
questions:
how treat $val string, not number?
how disable exponent interpretation?
from manual on is_numeric(), you'll notice there plenty of characters can go in:
numeric strings consist of optional sign, number of digits, optional decimal part , optional exponential part. +0123.45e6 valid numeric value. hexadecimal (e.g. 0xf4c3b00c), binary (e.g. 0b10100111001), octal (e.g. 0777) notation allowed without sign, decimal , exponential part.
if wish check if variable type integer, can use is_int(), , floats, can use is_float(). note, though, e.g. is_int()
, variable must of type integer, not numeric string. use ctype_digit() this, variable type have string; or specifically, not integer matches ascii character's ord()
.
it may easiest use if (preg_match('#^\d+(\.\d+)?$#', $str))
validate variable of which-ever type having digits. (remove expression in brackets pattern if optional decimals not welcome.)
the other option ctype_digit((string) $str)
, casting variable string type avoid ascii mapping clash integer types. not return true if had decimal points.
100000 loops of ctype_digit
: 0.0340 sec. 100000 loops of preg_match
: 0.1120 sec. use ctype_digit
if want digits , intend a lot. otherwise; whatever fits style.
Comments
Post a Comment