javascript允许使用逗号和点的有效数字

时间:2014-01-27 08:05:30

标签: javascript regex

如何以格式测试有效数字?

Accepted:-
    100,000
    100,000.00
    100,000.0000
    10,000,000.00
    0.00
    10000.000
Not Accept:-
    ,100,00,.
    ,.100.00
    100.00,00
    100..,, 

(只允许单点(小数点)和多个逗号,但数字不应以逗号或点开头或结尾,不应该有任何不正确的逗号和点的使用,如上图所示)我试过以下java脚本为此,但它无法解决我的问题。任何人都可以更新我的功能...

 function isNumber(evt) {
         var theEvent = evt || window.event;
         var key = theEvent.keyCode || theEvent.which;
         key = String.fromCharCode(key);
         if (key.length == 0) return;
         var regex = /^(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/;
         //var regex = /^[0-9.,]+$/;
         if (!regex.test(key)) {
             theEvent.returnValue = false;
             if (theEvent.preventDefault) theEvent.preventDefault();
         }
     }

4 个答案:

答案 0 :(得分:4)

试试这个:

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

numRegex.test("1,000,000");
numRegex.test("100,000");
numRegex.test("100,000.00");

答案 1 :(得分:1)

选中此项:^((?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?)$

<强> DEMO and Explanation

答案 2 :(得分:0)

尝试

^(\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+|)$

Expl。:匹配一到三位数字。然后允许任意数量的组使用逗号后跟三位数。如果以前没有匹配,请尝试任意数量的数字(多个)。然后允许可选的小数。改为

 ^(\d{1,3}(?:,\d{3})*|\d+)\.\d+$

如果小数是强制性的。

查看regex101

此致

答案 3 :(得分:0)

如果我没有弄错,问题不是(仅限?)正则表达式,而是使用事件处理程序:它接受单个字符,从这个单个字符创建String,然后匹配反对正则表达式。

var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);

永远不会给你一个字符串。如果必须使用抓取字符的事件,则必须使用全局变量在多次击键时累积字符串。

另一种方法是使用文本字段并在光标离开字段时验证字段内容。

如果您需要帮助,请添加isNumber处理事件的信息以及您希望实现的互动(击键处理或文本字段或其他任何内容)。

编辑:

您必须从击键事件中找出用户所在的字段。获取该字段的文本值,并将正则表达式与字段值匹配,而不是针对单击键。

我认为,第一个问题是棘手的。要么只为需要验证的文本字段创建事件处理程序,要么(如果有几个要验证的字段)为包含所有这些字段的DOM元素创建处理程序,并查看event.target(希望是您定位的浏览器足够兼容以支持此功能),它为您提供触发事件的DOM元素。