2012-07-02 39 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