2014-07-14 78 views
1

我在驗證數字時遇到了一個實際問題。無符號驗證數字(科學)

如果我的表單有一個貨幣值(1.99)的字段,我可以使用floatval來驗證輸入並保存在我的數據庫中。

但是,如果該值是科學記數法(1E7),該操作將返回true,並且我將在保存在我的數據庫中時遇到問題。

我是天試圖解決這個問題,我怎麼能解決這個問題? 由於事先

例如:從瀏覽器

floatval('17E20') // float(1.7E+21) 
floatval('0xFF' ) // float(0) 
floatval('7E-10') // float(7.0E-10) 
floatval('1.23X') // float(1.23) 
+2

'floatval'不是驗證函數。你可以使用正則表達式。 – sectus

+0

我知道,函數is_float –

+1

不,'is_float'不是用戶輸入驗證函數。這只是檢查類型的變量。 :^)你有什麼反對正則表達式嗎? – sectus

回答

0

用戶輸入是字符串。我們需要在.,之後驗證字符串爲簡單的小數部分符號,後面帶有2位數字。

$value = '122.33'; 
$result = preg_match('/^\d+([\.,]\d{1,2})?$/', $value); 
           //^one or two digit 
          //^dot or comma 
         //^at least one digit 
+0

「is_numeric」函數在接受科學記數法時非常靈活。沒有原生函數來檢查數字0-9貨幣和整數?我打算使用你的RE與其他規則,並創建一個函數'TypeInput'就像驗證返回int,float,string ...想一個好主意?感謝RE –

+0

@PapaCharlie,是的,抽象是正確的方向。 – sectus

+0

我將使用ER來檢查類型以方便工作。謝謝你的幫助 –