使用javascript验证金额字段

时间:2014-12-09 20:20:57

标签: javascript jquery regex validation

我一直在寻找一个解决方案,但没有任何安静符合我的标准。

我希望用户能够输入任何正数(可选2个小数位,用点''分隔。')

即:1.23,12.23,123.23,1234.23,1,0

我该怎么做?

我试图使用这个正则表达式

$('form').submit(function(){

        var amount = $('#amount');
        var regex = new RegExp("^\d+(\.\d{1,2})?$");

        var error = 0;

        if(amount.val() == '' || amount.val() <= 0 || regex.test(amount.val()) == false){
            $('label', amount.parent()).addClass('error');
            error++;
        }else{
            $('label', amount.parent()).removeClass('error');
        }

        if(error > 0){
            return false;
        }

    });

我对正则表达式不是很有经验,并试图使用我通过搜索找到的上面的代码,但它似乎不起作用,我不知道为什么。我不确定这是正则表达式中的错误还是我使用它的方式。

5 个答案:

答案 0 :(得分:2)

var regex = new RegExp("^[-+]?\d+(\.\d\d?)?$");用于2位小数(第1次强制,第2次不要)。

答案 1 :(得分:1)

类似的东西:

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

请注意,我们删除了标记部分[-+]?,因为您只说了正数。

说明:

^             start of string
\d+           match zero or more digits
(\.\d{0,2})?  match the pattern in the brackets 0 or 1 time

\.            match a literal .
\d{1,2)       match 1 or 2 digits
$             end of string

因此,这允许某些数字可选地后跟.和1或2个数字。根据需要进行调整。

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

alert(rx.test("1.22") + "\n"         // true
      + rx.test("10") + "\n"         // true
      + rx.test("2223.4") + "\n"     // true
      + rx.test("foo") + "\n"        // false
      + rx.test("1..22") + "\n"      // false
     + rx.test(" 1"));               // false

答案 2 :(得分:0)

您发布的正则表达式允许任意数量的小数位。这个只允许2位小数

var regex = new RegExp("^[-+]?\d+(\.\d\d?)?$");

答案 3 :(得分:0)

它长而丑,我不记得我最初得到它的地方但这是我使用的那个(它验证了正确的逗号分隔,并允许在开头的可选$):

var regex = /^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?(.[0-9]{2})?$/;

这是一个工作小提琴:http://jsfiddle.net/5v9zcxrm/5/

对于我使用的小数位(。[0-9] {2})仅验证2个小数位或零。如果你想允许一个小数位使用:

var regex = /^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?(.[0-9]{1,2})?$/;

如果您只需要数字(没有逗号)并且可能使用一位或两位数的小数:

var regex = /^\d+(.[0-9]{1,2})?$/;

答案 4 :(得分:0)

$('form').submit(function(){

        var amount = $('#amount');
        var regex = /^\d+(\.\d{2,2})?$/;

        var error = 0;

        if(amount.val() == '' || amount.val() <= 0 || regex.test(amount.val()) == false){
            $('label', amount.parent()).addClass('error');
            error++;
        }else{
            $('label', amount.parent()).removeClass('error');
        }

        if(error > 0){
            return false;
        }

    });

这是我更新的解决方案,按预期工作。特别感谢Matt Burland和所有使这一切成为可能的人