Javascript 允许使用逗号和点的有效数字的java脚本

Javascript 允许使用逗号和点的有效数字的java脚本,javascript,regex,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脚本,但它无法解决我

如何测试格式为的有效数字

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();
         }
     }
试一试

解释:匹配一到三个数字。然后允许任意数量的组使用逗号后跟三位数字。如果与上一个不匹配,请尝试任意位数(多个)。然后允许选择小数。改为

 ^(\d{1,3}(?:,\d{3})*|\d+)\.\d+$
如果小数是强制性的

退房

问候

试试看

解释:匹配一到三个数字。然后允许任意数量的组使用逗号后跟三位数字。如果与上一个不匹配,请尝试任意位数(多个)。然后允许选择小数。改为

 ^(\d{1,3}(?:,\d{3})*|\d+)\.\d+$
如果小数是强制性的

退房

关于

试试这个:

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");
试试这个:

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

如果我没有弄错的话,问题不在于正则表达式,而在于事件处理程序:它接受一个字符,从这个字符创建一个
字符串
,然后与正则表达式匹配

var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
我永远不会给你任何线索。如果必须使用字符抓取事件,则必须使用全局变量在多次击键时累积字符串

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

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

编辑:

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


我想,棘手的事情是第一个。要么只为需要验证的文本字段创建事件处理程序,要么(如果有多个字段需要验证)为包含所有这些字段的DOM元素创建处理程序,然后查看
event.target
(希望您的目标浏览器足够兼容以支持这一点),这将为您提供事件触发时的DOM元素。

如果我没有弄错的话,问题不在于(仅限于?)使用正则表达式,而是使用事件处理程序:它接受一个字符,从这个字符创建一个
字符串
,然后与正则表达式匹配

var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
永远不会给您字符串。如果必须使用字符捕获事件,则必须使用全局变量在多次击键时累积字符串

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

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

编辑:

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

我想,棘手的事情是第一个。要么只为需要验证的文本字段创建事件处理程序,要么(如果有多个字段需要验证)为包含所有这些字段的DOM元素创建处理程序,然后查看
event.target
(希望您的目标浏览器足够兼容以支持此操作),这将为您提供触发事件的DOM元素。

检查此项:
^((?:\d+\d{1,3})(,\d{3})+)(?:\。\d+)$

检查以下内容:
^((?:\d+\d{1,3}(?:,\d{3})+)(?:\。\d+)$



你还没有真正尝试过,是吗?
/^(?:\d++\d{1,3}(?:,\d{3}+)(?:\。。\d+?$/
它不起作用。用这段代码,即使我也不能键入逗号和点。你能更新你的代码吗。谢谢..废话,错过了一个结束部分。将
+(?:
改为
+)(?:
)改为
+)(?:
Vishnu,将一个答案标记为正确(或最有帮助的)你帮助其他访问者找到解决方案,并奖励他们的答案。如果问题没有解决,请多问。如果你找到了不同的解决方案,你可以回答自己的问题。或者,如果你多次问同一个问题,你可以链接到上,获得正确答案:你没有真正尝试过,是吗?
/^(?:\d++\d{1,3}(?:,\d{3})+(?:\。\d+)$/
不起作用。使用此代码,即使我也无法键入逗号和点。你能更新你的代码吗。谢谢..废话,错过了一个结束部分。将
+)(?:
更改为
+)(?:
毗湿奴,将一个答案标记为正确(或最有用),你可以帮助其他访问者找到解决方案,并奖励他们的答案。如果问题没有解决,请多问。如果你找到了不同的解决方案,你可以回答自己的问题。或者,如果你多次问同一个问题,你可以链接到上以获得正确答案:刚刚注意到,你似乎允许使用三个d以外的组igits。正确吗?在这种情况下,相应地更改大括号内的值。它不起作用。如果我使用上述代码,我甚至不能选择逗号和点。你能更新你的代码吗。我错过了你允许的不带逗号的数字。编辑的答案。注意-你不能在键入时使用它进行验证。只有“退出时”。如何使第一个数字不是0或负数?@Markov我假定您的意思是,它的开头不超过一个数字,其中第一个数字是
0
。您可以在正则表达式的开头插入一个负数:使它
(?!0\d)
成为
^(?!0\d)(\d{1,3}(?:,\d{3})*\d+(:\。\d+)$
。它确保它不会以零开头,后面跟着另一个数字。不会吗