Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的RegEx允许向文本字段输入负小数_Javascript_Regex - Fatal编程技术网

Javascript中的RegEx允许向文本字段输入负小数

Javascript中的RegEx允许向文本字段输入负小数,javascript,regex,Javascript,Regex,我有一个要求,我需要允许加号/减号在开头,后面是一个十进制数字,它只允许在html中输入的文本字段中有一个点 基本上,文本字段应允许正常整数和十进制数,以及负整数和负十进制数。加号和减号只允许出现在开头(第一个字符),并且是可选的。还应允许任何小数位数(例如:-12.12345等),但条目中只有一个小数点(点) 允许的数字为:1、+1、-1、.1、+1.1、-1.1、.12、+12、123.4456、-123.345、+123.345等 function isNumber(myfield, e)

我有一个要求,我需要允许加号/减号在开头,后面是一个十进制数字,它只允许在html中输入的文本字段中有一个点

基本上,文本字段应允许正常整数和十进制数,以及负整数和负十进制数。加号和减号只允许出现在开头(第一个字符),并且是可选的。还应允许任何小数位数(例如:-12.12345等),但条目中只有一个小数点(点)

允许的数字为:1、+1、-1、.1、+1.1、-1.1、.12、+12、123.4456、-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);
}
非常感谢您的帮助

我使用下面的正则表达式来满足上述要求

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');"/>
在这种情况下,它与表达式不匹配。它没有达到警戒4

有一点是,它只允许一位小数,不能超过一位

有人能帮我修改我的正则表达式,以便在开始时只允许+/-,并且只允许一次


谢谢。

我想你想要这样的东西:

^[-+]?(\d+\.?|\d*\.\d+)$

由于十进制分隔符前面的数字或后面的数字是可选的(例如
1.
.1
),但两者都不是,因此您需要单独处理这些情况。

使用
isNumber
函数验证文本,而不是使用正则表达式

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
var测试变量=['1'、'+1'、'-1'、'.1'、'-1.1'、'-1.1'、'-12'、'-12'、'-12'、'-123.4456'、'-123.345'、'+123.345'];
var reg=/^[\+\-](?:\.?\d+\d+\.?\d+$/;
var i;
对于(i=0;i

您也可以使用测试用例来尝试此操作:)

我使用了“niksvp”脚本并进行了一些修改以满足我的要求

var integerOnly = /[\+\-0-9\.]/g;
下面的脚本适用于所有类型的+/-十进制数。例:1.1、+1.1、-1.1、-1、+1、1、-1、+1123.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);
}

感谢大家的帮助。

要轻松使用RegEx并立即查看结果,请尝试上面的方法,但似乎不起作用。我编辑了我原来的帖子,你能看看有没有什么问题吗。老实说,我的回答中有一些问题,但是@niksvp的回答会以最好的方式完成你的请求,你应该按照他的回答,在这种情况下不使用RegExp。您需要以以下方式使用脚本:我不明白该脚本如何验证,或者它为您服务的目的是什么?此外,它只允许在开头使用+/-符号,并且只允许一个小数点。该脚本只允许对文本字段进行有效输入。在假定接受有效十进制输入+/-的文本字段中,如果您尝试向该字段输入任何字母数字或无效数字,则它不会执行任何操作。这样,您就可以验证输入。当然,我们也需要提供服务器端验证,以防脚本被禁用,不知何故被绕过。ok似乎仍然允许我以字母表的形式输入第一个字符。