我有一个要求,我需要在开头允许加号/减号,后跟一个十进制数,该十进制数在html的文本字段输入中仅允许一个点。
基本上,文本字段应允许使用普通整数和十进制数,也可以使用负整数和负十进制数。加号和减号只能在开头(第一个字符)中使用,并且是可选的。还应允许任意数量的小数位(例如:-12.12345等),但条目中只能包含一个小数点(点)。
允许的数字为:1,+ 1,-1,.1,+ 1.1,-1.1,-。12,+。12、123.4456,-123.345,+ 123.345等
非常感谢您的帮助。
我使用下面的正则表达式满足上述要求。
var integerOnly = /[\+\-0-9\.]/g;
和下面的脚本(我是从其他一些线程稍加修改后获得的)来验证它。
function restrictInput(myfield, e, restrictionType, checkdot){
if (!e) var e = window.event
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code);
alert("1 " + character);
// if user pressed esc... remove focus from field...
if (code==27) { this.blur(); return false; }
//alert("2");
// ignore if the user presses other keys
// strange because code: 39 is the down key AND ' key...
// and DEL also equals .
if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) {
alert("3");
if (character.match(restrictionType)) {
alert("4");
if(checkdot == "checkdot" & '-' != character & '+' != character){
alert("5");
return !isNaN((myfield.value.toString()==''? '0':myfield.value.toString())+character );
} else {
return true;
}
} else {
return false;
}
}
}
这是脚本的调用方式。
<input type="text" id="db" width="3" value="" onkeypress="return restrictInput(this, event, integerOnly, 'checkdot');"/>
除了少数情况,它工作正常:
我尝试如下修改正则表达式。
var integerOnly = /[\+\-]?[0-9\.]/g;
在这种情况下,它与表达式不匹配。它没有达到警报4。
一件事是它只允许小数点后一位。
有人可以帮我修改我的正则表达式,以便在开始时只允许+/-,并且一次只允许一次。
谢谢。
最佳答案
代替使用正则表达式,使用isNumber
函数验证文本,如下所示
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
关于javascript - Javascript中的RegEx允许将负十进制输入到文本字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12595829/