代码之家  ›  专栏  ›  技术社区  ›  DaveDev

如何确保文本框中只输入有效的数字字符?

  •  4
  • DaveDev  · 技术社区  · 14 年前

    是否有任何现有的jQuery功能可以测试文本框中输入的字符是数字字符还是数字中的有效字符?

    .00 0.00 ,但不是 0.00.00 0a

    我想做的是在任何无效字符出现在文本框中之前捕获它们。

    如果jQuery不可能做到这一点,那么最好的方法是什么?

    我知道用JavaScript我可以测试 isNaN() 然后返回false,但当我必须解释所有可能的按键时,这将开始变得毛茸茸的。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Peter Ajtai    14 年前

    这有点棘手,因为你想确保你可以从左到右输入所有数字,但是像这样:

    $("input").keyup(function() {       
        this.value = this.value.match(/[-+]?[0-9]*\.?[0-9]*/);
    });
    

    Try it out with this jsFiddle

    注意我是如何从左到右检查号码的。这意味着 + 必须有效。阿尔索 5. 必须有效,否则您将无法进入 5.0 +5

    现在上面有一些主要问题(试试箭头键)。

    下面是一个稍微优雅一点的解决方案,它也可以容纳默认值:

    $(function() {                      // <== DOC ready
    
        var prev="";                    // Initial value to replace default text with
    
        $("input").click(function () {  // Include a select on click
            $(this).select();           // if you have a default value
        });
    
        $("input").keyup(function() {  
    
            if(/^[-+]?[0-9]*\.?[0-9]*$/.test(this.value)) // If number....
                prev = this.value;                        // store it as the fallback
            else
                this.value = prev;                        // else go to fallback
        });
    });
    

    Try it out with this jsFiddle

    上面的HTML示例:

    <input type="text" value="Enter only a number" />
    

    .test() 你必须从头开始测试 ^ 到最后 $ .

        2
  •  9
  •   Jack    14 年前

    $('#formelement').val().match(/[-+]?[0-9]*\.?[0-9]+/)
    

    (不包括选择器,其他都是纯javascript)

    如注释中所述,由于需要对插入的每个字符执行此操作,因此必须将空的小数部分视为有效(例如。 /[-+]?[0-9]*\.?[0-9]*/

    由于评论中的人强迫我精确,我可以建议你如何使用这种匹配来达到你的目的(但这样你就不会让任何东西影响你的想象力:()

    如果验证例程与刚才描述的三个正则表达式中的至少一个匹配,则在编写时应接受该输入,并且在最后一个正则表达式匹配时应接受在最后完成的验证(因为您正在提交值,并且需要它是正确的)

        3
  •  1
  •   Paulo Scardine    14 年前

    似乎是正则表达式的工作:

    var x = '0.00';
    var y = '0.000.00';
    x.match(/^[0-9]+\.*[0-9]*$/); 
    y.match(/^[0-9]+\.*[0-9]*$/); // evaluates to null
    
        4
  •  0
  •   Andrew M    14 年前

    http://www.geektantra.com/2009/09/jquery-live-form-validation/

    如果您想手动处理这个问题,正则表达式也可以工作。

        5
  •  0
  •   Gab    14 年前

    我正在为我的项目使用这个插件: http://www.texotela.co.uk/code/jquery/numeric/

    不管怎样,它的简单使用效果很好!

    你可以这样使用它:

    $("input.numericInput").numeric();