2016-05-17 78 views
0

我想改進以下函數中用於驗證付款金額的正則表達式,以允許最多一個前導零,但前提是它也包含兩個小數位,並且不是0.00(從而使調用parseFloat沒有實際意義)提高驗證付款金額的正則表達式

function isValidPaymentAmount(paymentAmt) { 
    return /^\d+(\.\d{2})?$/.test(paymentAmt) && parseFloat(paymentAmt) > 0; 
} 
+0

在你的情況下'0.0099'是否是一個有效的參數? – RomanPerekhrest

+0

*最多隻有一個前導零,但前提是它也包含兩個小數位*聽起來像匹配'0111.00' - 真的嗎? – 2016-05-17 20:22:15

+0

我懷疑只是'/ ^(?! 0 + \。0 + $)\ d +(?:\。\ d {2})?$ /'會做。 –

回答

1

要匹配一個正的非零量,你需要擴展選項,這樣它不會允許一個前導零後的任何兩個數字,所以像:

^((0?\.((0[1-9])|[1-9]\d))|([1-9]\d*(\.\d{2})?))$ 
+0

我已經刪除了我的答案,我猜你投了票,因爲你評論了它不適用的一件事,但是真的,我做了幾乎所有的工作,你只是調整了以下內容:'/^((0,\.(([[[-9-9])|\d{2}))|([1-9]\d*(\.\d{2 })?))$ /' –

0

試試寫出來:

/^((0\.\d\d)|([1-9]\d*(\.\d\d)?))$/ 

但是如何省略0.00?你可以做一個單獨的檢查。如果你真的想用正則表達式來做到這一點,則該部分可以寫,而不是\d\d,作爲

[1-9]\d|\d[1-9] 

所以

/^((0\.([1-9]\d|\d[1-9]))|[1-9]\d*(\.\d\d)?)$/ 
+0

你的第二個正則表達式允許'0.0111111' –

+0

希望現在修復。 – 2016-05-18 16:18:06

0

您可以處理此爲:

^(0?[1-9]\d*\.\d\d|[1-9]\d*)$ 

交替的第一部分處理前導零和小數,前導零是可選的,第二部分交替處理整數。如果你想允許零作爲輸入,那麼你可以添加第二個替代:

^(0?[1-9]\d*\.\d\d|[1-9]\d*|0)$