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+)$
。它确保它不会以零开头,后面跟着另一个数字。不会吗