JQuery Проверка валидации валюты США, чтобы также обеспечить целые числа

У меня есть это регулярное выражение, но теперь нужно разрешить числа без десятичного числа

// 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 в число, хотел бы, чтобы он позволял как текущему регулярному выражению, так и целым числам без десятичного числа.

Я бы просто добавил? в конце второй половины RegEx?

// 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");

EDIT:

Хорошо, но что, если кто-то войдет в 1.2?

Ответ 1

Если вы хотите, чтобы все 1, 1.2 и 1.20 работали:

/^(\d{1,3})(\.\d{1,2})?$/

Ответ 2

Да, просто добавьте? до конца второй группы, чтобы сделать ее необязательной. Это должно работать хорошо.

Ответ 3

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

Это будет работать отлично, принимает два десятичных знака.

Ответ 4

Это был лучший, целостный ответ, который мы использовали для валютных входов регулярных выражений, который охватывает все, что нам нужно:/(?=.)^\$?(([1-9][0-9]{0,2 } ([0-9] {3}) *) |?.? [0-9] +) ([0-9] {1,2}) $/

Ответ 5

Я хотел протестировать клавиатуру. Поэтому мне нужно было принять 999999. до ввода первой десятичной позиции (десятых). Но, я все еще хотел макс в 2 десятичных (сотых) позициях - предполагая введенный 999.1 == 999.10 в моем коде.

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

UPDATE: Я закончил использование плагина проверки 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;
}

И, Боб, твой дядя...