以下代碼成功驗證字符串「0123.250」是否爲有效的float,如果不是。這是一個PHP錯誤還是我做錯了什麼?PHP filter_var bug?
filter_var('0123.250', FILTER_VALIDATE_FLOAT);
以下代碼成功驗證字符串「0123.250」是否爲有效的float,如果不是。這是一個PHP錯誤還是我做錯了什麼?PHP filter_var bug?
filter_var('0123.250', FILTER_VALIDATE_FLOAT);
從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]+
。
由於頁面從來沒有提到過八進制,所以我們需要假設前導零在解釋上沒有差別。
I 假設確切的規則適用於FILTER_VALIDATE_FLOAT
。
我認爲OP是指字符串'0123.250'不是浮動的事實。我跑了var_dump(is_float('0123.250'));並且返回值是bool(false)。但是,當我運行var_dump(is_float(0123.250))時,返回值爲bool(true)。 – awm
@Ali'is_float'檢查變量的類型。 ''0123.250''不是以同樣的方式浮動''hello kitty'不是浮動。從評論中,您可以看到OP在擔心引導零。 – phant0m
但我期望'filter_var('0123.250',FILTER_VALIDATE_FLOAT);'就像'filter_var('hello_kitty',FILTER_VALIDATE_FLOAT);'是假的。基本上,爲什麼PHP在數字而不是字符串中做出「0123.250」的假設? – awm
前導0只是說明了千位的值爲零的事實,這通常是由於該位置值沒有數字而暗示的事實。
如果您擔心前導零是非重要數字這一事實,我不認爲PHP嚴格遵循這個定義。
'floatval'也將其解析爲浮點數'123.25'。你是否期望前導零是無效的? – DCoder
爲什麼這是一個無效的浮點數? –
看起來像一個漂浮在我身邊... – MrCode