2012-02-13 83 views
0

我試圖驗證貨幣具有以下功能:驗證貨幣在JavaScript

function checkwages(input){ 
    var validformat=/^\d{0,5}(\.\d{1,2})?$/; 
    if (validformat.test(input)) { 
     // alert("$:"+ input + " test"); 
     return true; 
    } 
    return false; 
} 

我們的目標是確保用戶輸入數字或十進制格式。它不能爲0或負數。但是,當輸入字段爲空時,此格式中的0位有效將失敗。但是,如果我將其更改爲/^\d{1,5}(\.\d{1,2})?$/,那麼.21將變爲無效並強制用戶輸入類似0.21的內容。我如何改變正則表達式,以至於.21被認爲是有效的數字?

感謝

+0

JavaScript正則表達式接受預見嗎?如果沒有,你只能使用一個正則表達式。 – m0skit0 2012-02-13 19:06:43

+0

有一種方法可以修改正則表達式來考慮這個OR,我只是找不到正確的方法。我所有的試驗都失敗了,但是我確信有一種方法可以用一個正則表達式來執行 – Kiran 2012-02-13 19:14:56

+0

您沒有回答我的問題。無論如何,如果我理解正確,你希望它接受一個沒有小數點的數字(例如2345),帶小數點(234.56),但也是.XX,是正確的嗎? – m0skit0 2012-02-13 19:28:47

回答

1
/^(?=.*[1-9])\d{0,5}(\.\d{1,2})?$/ 

位開始時在字符串中的任何位置查找非零值,但不捕獲它。

+0

這只是工程.. – Kiran 2012-02-13 20:19:56

+0

它的魔力! :) – 2012-02-13 20:24:03

-2

沒有辦法證明用正則表達式輸入是大於0。但是,這是你的條件之一(「它不能爲0」)。所以即使你的第二個RegEx用戶可以輸入0或0.0,這將被評估爲真。

我的建議是,你用你的第一個正則表達式,並用這個簡單的對比結合起來:

if (validformat.test(input) && input.length > 0 && input > 0) 

然後驗證應滿足您的所有需求,這是非常簡單的(動態類型FTW)。

+0

不行,不行。他再次閱讀他的問題,他解釋了爲什麼;) – m0skit0 2012-02-13 19:42:02

+0

是的,我忘記了空白的輸入。但這不是一個真正的問題。只需添加「input.length> 0」即可。我編輯了我的答案,以便它現在應該是正確的。 – styrr 2012-02-13 19:52:02

+0

順便說一句''> 0返回false。所以input.length> 0是沒有必要的。 – styrr 2012-02-13 19:58:15