我有一个要求,其中我需要允许在开头加上加号/减号后跟一个十进制数字,在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.
有一点是它只允许一个小数位且不超过一个。
有人可以帮我修改我的正则表达式,以便在开头只允许+/-一次。
谢谢。
答案 0 :(得分:4)
不使用正则表达式,而是使用isNumber
函数验证文本,如下所示
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
答案 1 :(得分:1)
我认为你想要这样的东西:
^[-+]?(\d+\.?|\d*\.\d+)$
由于小数点分隔符前面的数字或后面的数字是可选的(例如1.
或.1
),但两者都不是,您需要单独处理这些案例。
答案 2 :(得分:0)
var test_ary = ['1', '+1', '-1', '.1', '+1.1', '-1.1', '-.12', '+.12', '123.4456', '-123.345', '+123.345'];
var reg = /^[\+\-]?(?:\.?\d+|\d+\.?\d+)$/;
var i;
for ( i = 0; i < test_ary.length; i = i + 1) {
console.log(reg.test(test_ary[i]));
}
您也可以尝试使用测试用例:)
答案 3 :(得分:0)
我拿了'niksvp'脚本并修改了一下以满足我的要求。
以下脚本适用于所有类型的+/-十进制数字。例如:1.1,+ 1.1,-1.1,.1,-.1,+ 1,1,1,-1,1 + 123,345,+ 123.345,-123.345等
function isNumber(myfield, e) {
if (!e) var e = window.event
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code);
var n = myfield.value.toString()==''? '0':myfield.value.toString();
// this is required to allow numbers of this format
// -1.1, + 1.1, .1, -.1, +.1 etc
if(n == '-' | n == '+' | n== '.') {
n +=0;
}
if(n.length > 1) {
n = n.toString() + character;
}
return !isNaN(parseFloat(n)) && isFinite(n);
}
感谢大家的帮助。