【发布时间】:2012-09-26 06:34:17
【问题描述】:
我有一个要求,我需要在开头允许加号/减号,后跟一个十进制数字,该数字在 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。
一件事是它只允许一个小数位并且不超过一个。
谁能帮我修改我的正则表达式,以便在开头只允许 +/- 并且只允许一次。
谢谢。
【问题讨论】:
-
要轻松使用 RegEx 并立即查看结果,请尝试 regexpal.com
标签: javascript regex