3

次のコードは、文字列「0123.250」が有効なフロートではない場合でも、有効なフロートとして正常に検証されます。これはPHPのバグですか、それとも何か間違ったことをしましたか?

filter_var('0123.250', FILTER_VALIDATE_FLOAT);
4

2 に答える 2

3

floatリテラルに関するPHPドキュメントから:

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

ご覧のとおり、次のビットで示されているように、先行ゼロに制限はありませ[0-9]*[\.][0-9]+

このページでは8進数について一度も言及されていないため、先行ゼロは解釈に違いがないと想定する必要があります。

まったく同じルールが適用されると思いFILTER_VALIDATE_FLOATます。

于 2012-11-24T22:01:00.727 に答える
1

先頭の0は、千の場所の値がゼロであるという事実を明示するだけです。これは通常、その場所の値に数字がないことによって暗示されます。

先行ゼロが有効数字ではないという事実を心配しているのであれば、PHPはその定義に厳密に従っているとは思いません。

于 2012-11-24T21:53:41.167 に答える