2013-03-24 74 views
0

我試過這段代碼,但我想我的錯誤與我的正則表達式,因爲它總是truejquery驗證八個整數和兩位小數的輸入

除了正則表達式,我還有一個keypress問題,因爲我在添加新字符之前測試該值,我不想使用keyup,因爲我不知道最後一個字符的添加位置(用戶不會總是在輸入字段的末尾輸入字符)。

我將不勝感激一個很好的解決方案,謝謝。

$('.myInputField').keypress(function(){ 
    var val = $(this).val(); 
    var regexTest = /^[0-9]{0,8}[.][0-9]{0,2}|[0-9]{0,8}$/; 
    var ok = regexTest.test(val); 
    if(ok) 
     return true; 
    else 
     return false; 

回答

0

我想你可能需要一個正則表達式是這樣的:

/^\d{0,8}(\.\d{0,2})?$/ 

您使用.代替\.,但.將匹配任何字符

?臨近尾端允許你有「.12」或沒有它。

\d是限制數字的捷徑。

請考慮不要使用keypress這個 - keyup(更好)或change(最好)將是其他選項來思考。

如果你需要「非常敏感」的反饋(不能只用change),可考慮做這樣的事情(請用更好的方法比簡單的CSS我在示例中使用):

$('.myInputField').keyup(function(e){ 
    var val = $(this).val(); 
    var regexTest = /^\d{0,8}(\.\d{1,2})?$/; 
    var ok = regexTest.test(val); 
    if(ok) { 
     $(this).css('background-color', 'green'); 
    } else { 
     $(this).css('background-color', 'red'); 
    } 
}); 

JS FIDDLE EXAMPLE

注:我也改變了代碼,這樣,如果你在輸入輸入.,我們希望你把至少一位小數點以下。如果你真的不想這個編輯,更改\d{1,2}\d{0,2}

+0

謝謝,但它仍然無法工作:) – kerbelp 2013-03-24 15:24:58

+0

和你有什麼想法如何克服按鍵問題? – kerbelp 2013-03-24 15:25:26

+0

而不是kepress()你可以使用change()這將運行,只要文本框的值已被更改 – Vortex 2013-03-24 15:31:44