2013-04-22 48 views
0

要求:正则表达式来限制输入字段atmost两位小数

我试图限制输入字段只有数字或数字键入高达只有两个小数。如果用户输入两个以上的小数位,则输入字段必须仅显示最多两位小数的数字,并删除所有其他数字。我正在使用正则表达式。

问题:

当多于两位小数在输入字段中输入的,所有的小数位被删除,显示。问题在于正则表达式。

请帮助我形成一个正确的正则表达式。

代码:

http://jsfiddle.net/h6kYh/

$(document).ready(function() { 

    $("#AmountField").bind("keyup change", function() { 

    var value = $(this).val(); 

     var numericReg = /^d+(?:\.\d{0,2})?$/ ; 
     if(!numericReg.test(value)) 
     { 
      value = value.replace(/(?=\d*\.?)(\d{3})/g,""); 
      $(this).val(value); 
     } 
    }); 
}); 

回答

0

应该

var invalidNumericReg = /^\d+(\.\d{3,})$/; 
    var validNumericReg = /^d+\(.\d{1,2})?$/; 

    if(invalidNumericReg.test(value))//has more than 3 decimal numbers! 
    { 
     value = value.replace(/^(\d+\.\d{2})\d+$/g,"$1"); 
     $(this).val(value); 
    } 
    else if(! validNumericReg.test(value)) 
    { 
     //invalid input 
    } 
+0

替换字符串应该是'$ 1'不是'\ 1'。 – MikeM 2013-04-22 17:57:27

+0

非常感谢Anirudh。但我想保留并显示数字最多两位十进制数字,以防止输入并从第三位移除小数。你可以为它建议正则表达式吗? – user2229399 2013-04-22 17:57:56

+0

感谢MikeM,那有效。 :)谢谢Anirudh :) – user2229399 2013-04-22 18:00:12

0

尝试

var numericReg = /^\d+\.?\d?\d?$/ ; 
if(!numericReg.test(value)) { 
    value = value.replace(/^(\d+\.?\d?\d?)?.*/,'$1'); 
    $(this).val(value); 
} 
+0

不,似乎不接受任何输入本身! – user2229399 2013-04-22 18:22:05

+0

@ user2229399。固定。我没有意识到你正在测试每个键盘。 – MikeM 2013-04-22 18:34:08

+0

'11.aa'会变成'11.' – Anirudha 2013-04-22 18:37:20