我想要一个文本框的正则表达式,它只允许3位数并传递以下标准:
我有以下RE部分工作:
/^\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。
答案 0 :(得分:2)
您需要至少1位数,但最多3位:\d{1,3}
OR
小数点前必须至少有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 :(得分:1)
试试/^\d{1,3}|(\d{1,2}\.\d)$/
?
你的角色类不应该逃避这个时期,所以它应该是[.]
,虽然我更喜欢只写\.
,因为为一个角色创建一个类是浪费。同样,当\d{1}
表示完全相同的事情时,\d
是多余的。我也假设您不想允许空文本框,所以我写了一些允许1-3位数字,或1-2位数字,一个句点,然后再多一个数字。如果这是错误的,您可以将第一个\d
的范围更改回{0,3}
,这将允许包含任何内容的文本框。
答案 2 :(得分:0)
使用此re:
/^\d{1,3}$|^\d{1,2}[.]\d$/