2012-07-02 44 views
0

我需要限制輸入,以便用戶只能輸入美元金額。這意味着他們可以輸入一串數字,可選擇後跟一個小數和0-2個數字。沒有逗號,沒有美元符號。智能白名單限制輸入值

我發現我認爲這是一個很好的模式,但我也希望允許用戶使用退格鍵,輸入,選項卡等。我希望有一個更好的方法來做到這一點,而不是明確列出每個有效的鍵碼在我的白名單上。我希望/\W/可以做到這一點,但唉,它匹配太多的按鍵。

這是我現在擁有的。

$input.keypress(function(evt) { 
    var ch = String.fromCharCode(evt.which); 
    var val = evt.target.value + ch; 
    var pattern = /^\d+(\.?(\d{1,2})?)$/; 
    if (!pattern.test(val)) { 
     evt.preventDefault(); 
    } 
    }); 

如果有一個聰明的和乾淨的方式允許用戶進行更正並導航與鍵盤的形式,我會很高興聽到這個消息。

如果您有一個改進上述正則表達式的建議,請隨時將其包含在您的答案中(或者如果您沒有答案,請留下評論)。

謝謝!

+1

我想嘗試一個像這樣的正則表達式:'\ $?[0-9,] + \(?:。[0-9] {2})?'。它會匹配'123,456.00'以及'123456'。 – Blender

+0

@Blender:謝謝,我會用它,但他們實際上不希望逗號和美元符號在現場輸入。 – Samo

回答

1

當我在我的代碼中這樣做時,我不在按鍵本身上運行正則表達式,而是在它們鍵入的字段的內容上運行。這樣你就不必擔心非打印字符。你將需要擔心他們被切入到不會觸發按鍵事件的領域。

+0

如果我正確理解你,你會做一個'keyup'事件而不是'keypress',這樣按下的任何按鍵在事件觸發時都已經更新了該字段。然後,如果字段值與模式不匹配,則會去掉最後一個字符。它是否正確? – Samo