Javascript中带小数的数字的正则表达式

Javascript中带小数的数字的正则表达式,javascript,regex,Javascript,Regex,我想要一个文本框的正则表达式,它只允许3位数字,并通过以下标准: 仅限数字(234或123)或 末尾只有一位小数(55.1) 不应允许有空格 如果使用十进制,则在十进制之后/之前也应该有一个数字(不允许使用555.或12.或.12) 我有以下部分工作的RE: /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/ 修改这个有什么帮助吗 看起来问题是额外的: 我在按键时使用代码。因此,它会在按键时验证每个按下的值 if (window.event) { knum

我想要一个文本框的正则表达式,它只允许3位数字,并通过以下标准:

  • 仅限数字(234或123)或
  • 末尾只有一位小数(55.1)
  • 不应允许有空格
  • 如果使用十进制,则在十进制之后/之前也应该有一个数字(不允许使用555.或12.或.12)
  • 我有以下部分工作的RE:

    /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/
    
    修改这个有什么帮助吗

    看起来问题是额外的:

    我在按键时使用代码。因此,它会在按键时验证每个按下的值

      if (window.event)    {
            knum = e.keyCode;
        }
        else if (e.which)    {
            knum = e.which;
        }
        kchar = String.fromCharCode(knum);
        numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;
    
        alert(numcheck.test(kchar));
    

    对于任何十进制按键,它都返回false。即使我输入55,然后在中间尝试一个十进制数使其为5.5,它也会返回false。

    您至少需要1位数字,但最多需要3位:
    \d{1,3}

    小数点之前和之后必须至少有1位,但不超过2位:
    \d{1,2}[.]\d

    所以这些组合:
    /(^\d{1,3}$|^\d{1,2}[.]\d$)/

    更新:

    您正在测试在按键事件中添加的字符,而不是输入字段的完整值。这永远不会有预期的结果

    document.getElementById("yourfield").onkeyup = function(e) {
    
        // the event
        if (!e) e = window.event;
    
        // determine the target of the keyup event (the input field)
        var targ;
        if (e.target)
           targ = e.target;
        else if (e.srcElement)
           targ = e.srcElement;
        if (targ.nodeType == 3) // defeat Safari bug
           targ = targ.parentNode;
    
        // get the value
        kchar = targ.value;
        numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;
    
        // test
        alert(numcheck.test(kchar));
    }
    

    您至少需要1位数字,但最多需要3位:
    \d{1,3}

    小数点之前和之后必须至少有1位,但不超过2位:
    \d{1,2}[.]\d

    所以这些组合:
    /(^\d{1,3}$|^\d{1,2}[.]\d$)/

    更新:

    您正在测试在按键事件中添加的字符,而不是输入字段的完整值。这永远不会有预期的结果

    document.getElementById("yourfield").onkeyup = function(e) {
    
        // the event
        if (!e) e = window.event;
    
        // determine the target of the keyup event (the input field)
        var targ;
        if (e.target)
           targ = e.target;
        else if (e.srcElement)
           targ = e.srcElement;
        if (targ.nodeType == 3) // defeat Safari bug
           targ = targ.parentNode;
    
        // get the value
        kchar = targ.value;
        numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;
    
        // test
        alert(numcheck.test(kchar));
    }
    
    请使用以下命令:

    /^\d{1,3}$|^\d{1,2}[.]\d$/
    
    请使用以下命令:

    /^\d{1,3}$|^\d{1,2}[.]\d$/
    
    试试
    /^\d{1,3}|(\d{1,2}\.\d)$/

    你的字符类不应该逃过句点,所以应该是
    [.]
    ,尽管我更喜欢只写
    \.
    ,因为为一个字符创建一个类是一种浪费。类似地,
    \d{1}
    是多余的,因为
    \d
    的意思完全相同。我还假设你也不想允许一个空的文本框,所以我写了一些东西,允许1-3个数字,或1-2个数字,一个句点,然后再多一个数字。如果这是错误的,您可以将第一个
    \d
    上的范围更改回
    {0,3}
    ,这将允许文本框不包含任何内容。

    尝试
    /^\d{1,3}|(\d{1,2}.\d)$/



    你的字符类不应该逃过句点,所以应该是
    [.]
    ,尽管我更喜欢只写
    \.
    ,因为为一个字符创建一个类是一种浪费。类似地,
    \d{1}
    是多余的,因为
    \d
    的意思完全相同。我还假设你也不想允许一个空的文本框,所以我写了一些东西,允许1-3个数字,或1-2个数字,一个句点,然后再多一个数字。如果这是错误的,您可以将第一个
    \d
    上的范围更改回
    {0,3}
    ,这将允许一个文本框不包含任何内容。

    只需将您的{0,2}更改为{1,2},但其他一切对我来说都很好。什么不起作用?为了清楚起见:您正在检查一个字符串,根据定义长度为1个字符:
    string.fromCharCode(knum)
    ,为什么要与最多允许4个字符的模式进行匹配?这样他们就不会在复选框中输入不需要的字符。因此,当我只有数字(/\d/)时,代码运行良好。我把它改为包含小数,并意识到这是行不通的。这修改了我的问题并提供了代码。您需要将kchar与/[0-9.]/匹配。在他们用下面的一个正则表达式键入之后,您必须检查整体有效性。否则,他们会键入类似55的内容。你会在他们到达最后一个数字之前阻止他们。只要把你{0,2}改成{1,2},其他的一切对我来说都很好。什么不起作用?为了清楚起见:您正在检查一个字符串,根据定义长度为1个字符:
    string.fromCharCode(knum)
    ,为什么要与最多允许4个字符的模式进行匹配?这样他们就不会在复选框中输入不需要的字符。因此,当我只有数字(/\d/)时,代码运行良好。我把它改为包含小数,并意识到这是行不通的。这修改了我的问题并提供了代码。您需要将kchar与/[0-9.]/匹配。在他们用下面的一个正则表达式键入之后,您必须检查整体有效性。否则,他们会键入类似55的内容。你会在他们到达最后一位之前阻止他们。这违反了他们的条件#2:“末尾只有一个小数点(55.1)”违反了他们的条件#2:“末尾只有一个小数点(55.1)”我可能可以在代码中比较它在kchar=String.fromCharCode(knum);步骤??我的意思是,如果我在输入框中获取已经存在的文本,并与输入的字符串连接,从而得到完整的文本,而不是使用单个字符进行比较?如果可能的话,还有类似的事情吗?如果愿意,将单个字符与
    /[0-9.]/
    进行比较,然后附加它们,但在提交或处理该值之前,在末尾进行最后一次检查,以查看使用完整正则表达式的整体格式是否正确。并且永远记住,他们可以关闭JavaScript并将任何内容放在其中;步骤??我的意思是,如果我在输入框中获取已经存在的文本,并与输入的字符串连接,从而得到完整的文本,而不是使用单个字符进行比较?如果可能的话,还有类似的事情吗?如果愿意,将单个字符与
    /[0-9.]/
    进行比较,然后附加它们,但在提交或处理该值之前,在末尾进行最后一次检查,以查看使用完整正则表达式的整体格式是否正确。并且永远记住,他们可以关闭JavaScript并在其中放入任何内容