JavaScript onkeyup正则表达式

时间:2012-01-06 17:20:09

标签: javascript regex

我有一个小表格,用户以美元金额输入存款。这个数量可以是正数或负数。我每次按下一个键时都试图验证表格,以防止意外输入字母或字符。

考虑以下功能:

var deposit = document.getElementById("deposit");

deposit.onkeyup = function() {
    var PATTERN = /\d$/;

    if (!deposit.value.match(PATTERN)) {
        deposit.value = deposit.value.replace(deposit.value.slice(-1), "");
    }
}

如果您只希望用户能够输入数字,这可以正常工作。任何其他角色都将被删除。我遇到麻烦的地方是提出一种模式,可以动态地匹配正面或负面货币(没有美元符号)。用户需要能够输入一个可选的负号,至少一个数字,后跟一个小数点,然后再输入2个数字。

存款金额示例:

0.09

100.45

4032.34

-0.90

-54.56

-1353.00

任何提供模式的帮助,或者甚至是更好的方法,都将非常感激。如果需要更多细节,请告诉我。

4 个答案:

答案 0 :(得分:5)

您可以使用此验证模式来匹配这些数字值。

^-?\d+\.\d{2}$

答案 1 :(得分:2)

这应该符合您的要求:

var PATTERN = /\-?\d+\.\d{2}$/;

问号意味着它是可选的。

答案 2 :(得分:1)

请注意,每次按键时都无法匹配有效(负)小数,因为用户以减号或数字开头,这已经与模式不匹配。

您需要一个检查输入的字符是否有效,另一个检查提交时是否为有效小数,或者当用户从字段移动焦点时。

答案 3 :(得分:0)

这是我的最终解决方案。我实际上能够让我的“onkeyup”功能几乎像我想的那样工作。虽然它不会动态检查货币格式,但它不允许输入除指定的字母和字符以外的字母和字符。虽然这可能并不完美,但它确实符合我对这项小任务的需求。感谢所有有意见的人。

deposit.onkeyup = function() {
    var PATTERN = /[^0-9-.]/;

    if (deposit.value.match(PATTERN)) {
        deposit.value = deposit.value.replace(deposit.value.slice(-1), "");
    }
}

然后我验证了存款“onblur”的格式

var PATTERN = /\-?\d+\.\d{2}$/;

    if (!reDeposit.value.match(PATTERN)) {
        depositError.innerHTML = "Enter a valid amount";
    }