如何以格式测试有效数字?
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();
}
}
答案 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元素。