我有一个要求,其中我需要在开头允许加号/减号,后跟一个十进制数字,该数字在 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。
一件事是它只允许一个小数位并且不超过一个。
有人可以帮我修改我的正则表达式,以便在开始时只允许 +/- 并且只允许一次。
谢谢你。