Javascript中带小数的数字的正则表达式
我想要一个文本框的正则表达式,它只允许3位数字,并通过以下标准:Javascript中带小数的数字的正则表达式,javascript,regex,Javascript,Regex,我想要一个文本框的正则表达式,它只允许3位数字,并通过以下标准: 仅限数字(234或123)或 末尾只有一位小数(55.1) 不应允许有空格 如果使用十进制,则在十进制之后/之前也应该有一个数字(不允许使用555.或12.或.12) 我有以下部分工作的RE: /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/ 修改这个有什么帮助吗 看起来问题是额外的: 我在按键时使用代码。因此,它会在按键时验证每个按下的值 if (window.event) { knum
/^\d{0,3}$|^\d{0,2}[\.]\d{1}$/
修改这个有什么帮助吗
看起来问题是额外的:
我在按键时使用代码。因此,它会在按键时验证每个按下的值
if (window.event) {
knum = e.keyCode;
}
else if (e.which) {
knum = e.which;
}
kchar = String.fromCharCode(knum);
numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;
alert(numcheck.test(kchar));
对于任何十进制按键,它都返回false。即使我输入55,然后在中间尝试一个十进制数使其为5.5,它也会返回false。您至少需要1位数字,但最多需要3位:
\d{1,3}
或
小数点之前和之后必须至少有1位,但不超过2位:\d{1,2}[.]\d
所以这些组合:/(^\d{1,3}$|^\d{1,2}[.]\d$)/
更新:
您正在测试在按键事件中添加的字符,而不是输入字段的完整值。这永远不会有预期的结果
document.getElementById("yourfield").onkeyup = function(e) {
// the event
if (!e) e = window.event;
// determine the target of the keyup event (the input field)
var targ;
if (e.target)
targ = e.target;
else if (e.srcElement)
targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
// get the value
kchar = targ.value;
numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;
// test
alert(numcheck.test(kchar));
}
您至少需要1位数字,但最多需要3位:
\d{1,3}
或
小数点之前和之后必须至少有1位,但不超过2位:\d{1,2}[.]\d
所以这些组合:/(^\d{1,3}$|^\d{1,2}[.]\d$)/
更新:
您正在测试在按键事件中添加的字符,而不是输入字段的完整值。这永远不会有预期的结果
document.getElementById("yourfield").onkeyup = function(e) {
// the event
if (!e) e = window.event;
// determine the target of the keyup event (the input field)
var targ;
if (e.target)
targ = e.target;
else if (e.srcElement)
targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
// get the value
kchar = targ.value;
numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;
// test
alert(numcheck.test(kchar));
}
请使用以下命令:
/^\d{1,3}$|^\d{1,2}[.]\d$/
请使用以下命令:
/^\d{1,3}$|^\d{1,2}[.]\d$/
试试/^\d{1,3}|(\d{1,2}\.\d)$/
你的字符类不应该逃过句点,所以应该是[.]
,尽管我更喜欢只写\.
,因为为一个字符创建一个类是一种浪费。类似地,\d{1}
是多余的,因为\d
的意思完全相同。我还假设你也不想允许一个空的文本框,所以我写了一些东西,允许1-3个数字,或1-2个数字,一个句点,然后再多一个数字。如果这是错误的,您可以将第一个\d
上的范围更改回{0,3}
,这将允许文本框不包含任何内容。尝试/^\d{1,3}|(\d{1,2}.\d)$/
你的字符类不应该逃过句点,所以应该是
[.]
,尽管我更喜欢只写\.
,因为为一个字符创建一个类是一种浪费。类似地,\d{1}
是多余的,因为\d
的意思完全相同。我还假设你也不想允许一个空的文本框,所以我写了一些东西,允许1-3个数字,或1-2个数字,一个句点,然后再多一个数字。如果这是错误的,您可以将第一个\d
上的范围更改回{0,3}
,这将允许一个文本框不包含任何内容。只需将您的{0,2}更改为{1,2},但其他一切对我来说都很好。什么不起作用?为了清楚起见:您正在检查一个字符串,根据定义长度为1个字符:string.fromCharCode(knum)
,为什么要与最多允许4个字符的模式进行匹配?这样他们就不会在复选框中输入不需要的字符。因此,当我只有数字(/\d/)时,代码运行良好。我把它改为包含小数,并意识到这是行不通的。这修改了我的问题并提供了代码。您需要将kchar与/[0-9.]/匹配。在他们用下面的一个正则表达式键入之后,您必须检查整体有效性。否则,他们会键入类似55的内容。你会在他们到达最后一个数字之前阻止他们。只要把你{0,2}改成{1,2},其他的一切对我来说都很好。什么不起作用?为了清楚起见:您正在检查一个字符串,根据定义长度为1个字符:string.fromCharCode(knum)
,为什么要与最多允许4个字符的模式进行匹配?这样他们就不会在复选框中输入不需要的字符。因此,当我只有数字(/\d/)时,代码运行良好。我把它改为包含小数,并意识到这是行不通的。这修改了我的问题并提供了代码。您需要将kchar与/[0-9.]/匹配。在他们用下面的一个正则表达式键入之后,您必须检查整体有效性。否则,他们会键入类似55的内容。你会在他们到达最后一位之前阻止他们。这违反了他们的条件#2:“末尾只有一个小数点(55.1)”违反了他们的条件#2:“末尾只有一个小数点(55.1)”我可能可以在代码中比较它在kchar=String.fromCharCode(knum);步骤??我的意思是,如果我在输入框中获取已经存在的文本,并与输入的字符串连接,从而得到完整的文本,而不是使用单个字符进行比较?如果可能的话,还有类似的事情吗?如果愿意,将单个字符与/[0-9.]/
进行比较,然后附加它们,但在提交或处理该值之前,在末尾进行最后一次检查,以查看使用完整正则表达式的整体格式是否正确。并且永远记住,他们可以关闭JavaScript并将任何内容放在其中;步骤??我的意思是,如果我在输入框中获取已经存在的文本,并与输入的字符串连接,从而得到完整的文本,而不是使用单个字符进行比较?如果可能的话,还有类似的事情吗?如果愿意,将单个字符与/[0-9.]/
进行比较,然后附加它们,但在提交或处理该值之前,在末尾进行最后一次检查,以查看使用完整正则表达式的整体格式是否正确。并且永远记住,他们可以关闭JavaScript并在其中放入任何内容