我有一个要求,我需要在开头允许加号/减号,后跟一个十进制数,该十进制数在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/

    10-13 04:47