以下代码成功地将字符串“0123.250”验证为有效的浮点数,而不是。这是一个PHP错误还是我做错了什么?
filter_var('0123.250', FILTER_VALIDATE_FLOAT);
答案 0 :(得分:3)
来自PHP documentation on float literals:
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
正如您所看到的,对于前导零没有限制,如这些位所示:[0-9]*[\.]
和[0-9]+
。
由于页面从未提及八进制,我们需要假设前导零在解释中没有区别。
我假设对FILTER_VALIDATE_FLOAT
应用完全相同的规则。
答案 1 :(得分:1)
前导0只是明确了千位的值为零的事实,这通常是由于缺少该位值的数字而暗示的。
如果你担心前导零是非重要数字的事实,我认为PHP不会严格遵循这个定义。