jQuery美元货币验证正则表达式,允许输入整数。

10

我已经使用了这个正则表达式,但现在需要允许没有小数点的数字。

// Validate for 2 decimal for money
jQuery.validator.addMethod("decimalTwo", function(value, element) {
    return this.optional(element) || /^(\d{1,3})(\.\d{2})$/.test(value);
}, "Must be in US currency format 0.99");

目前这会强制用户至少将.00添加到一个数字中,希望它能够允许当前的正则表达式和没有小数点的整数。

我只需要在正则表达式第二部分的末尾加上 ? 吗?

// Validate for 2 decimal for money
jQuery.validator.addMethod("decimalTwo", function(value, element) {
    return this.optional(element) || /^(\d{1,3})(\.\d{2})?$/.test(value);
}, "Must be in US currency format 0.99");

编辑:

好的,但如果有人输入1.2呢?


重新编辑:那么如果他们这样做呢?你没有告诉我们你希望在那种情况下发生什么。 - chaos
5个回答

14
如果您希望1、1.2和1.20都能够工作:
/^(\d{1,3})(\.\d{1,2})?$/

哦,我太忙于其他事情了,甚至没有想到这一点,哈哈,谢谢。 - Phill Pafford

2
是的,只需在第二个分组末尾添加一个问号即可使其变为可选项。这样应该能很好地工作。

0

我想在键盘松开时进行测试。因此,在输入第一个小数位(十分位)之前,我需要接受999,999。但是,我仍然希望最多只能输入2个小数位(百分位)- 假设在我的代码中输入999.1 == 999.10。

var currencywithcommas = /^(\d+|\d{1,3}(,\d{3})*)+(\.\d{2})?$/;
if ($("#yourelement").val().match(currencywithcommas)) {
  // positive match code
}

更新: 由于实现的原因,我最终使用了jQuery验证插件。
原型代码:
jQuery.validator.addMethod("currencywithcommas", function (value, element) {
    var currencywithcommasReg = /^(\d+|\d{1,3}(,\d{3})*)+(\.\d{2})?$/;
    return this.optional(element) || value.match(currencywithcommasReg);
}, "Must be in US currency format 9.99");

实现:

    $("#form1").validate({
        rules: {
            amount1: {
                required: true,
                currencywithcommas: true
            },
...

相同的概念,但扩展到使用验证功能。

$(".reqField1").each(function () {
    $(this).keyup(function () {
        $("#submitButton").prop("disabled", CheckInputs(".reqField1"));
    });
});

function CheckInputs(reqfldclass) {
    var valid = false;
    $(".reqField1").each(function () {
        if (valid) { return valid; }
        var input = $.trim($(this).val());
        valid = !input;
    });
    return valid;
}

而且,就这样搞定了...


是的Drew。它适用于我的实现。正如其他人指出的那样,这不适合与本地化相关的实现。 - Spencer Sullivan

0
$.validator.addMethod("money", function (value, element) {
     if ($("#<%= rdOtherAmt.ClientID %> input:checked")) {
         return this.optional(element) || /^((\d{1,5})+\.\d{2})?$|^\$?[\.]([\d][\d]?)$/.test(value);
     }                 
});

这将完美运行,采用两个小数位。


0

这是我们用过的最好的、全面的正则表达式货币输入答案,涵盖了我们所需的所有内容:/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?(.[0-9]{1,2})?$/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接