3

以下代码成功地将字符串“0123.250”验证为有效浮点数,但实际上它不是。这是一个 PHP 错误还是我做错了什么?

filter_var('0123.250', FILTER_VALIDATE_FLOAT);
4

2 回答 2

3

来自关于浮点文字的 PHP 文档

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

如您所见,前导零没有限制,如以下位所示:[0-9]*[\.][0-9]+.

由于该页面从未提及八进制,因此我们需要假设前导零对解释没有影响。

假设应用了完全相同的规则FILTER_VALIDATE_FLOAT

于 2012-11-24T22:01:00.727 回答
1

前导 0 只是明确表明千位值为零的事实,这通常是由于该位值没有数字而暗示的。

如果您担心前导零是一个非有效数字这一事实,我认为 PHP 并没有严格遵循该定义。

于 2012-11-24T21:53:41.167 回答