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

时间:2010-10-19 20:57:54

标签: javascript jquery

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

.000.00,但不是0.00.000a

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

如果jQuery无法实现,那么最好的方法是什么?

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

5 个答案:

答案 0 :(得分:9)

只使用正则表达式匹配

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

(不包括选择器,其他一切都是普通的javascript)

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

由于评论中的人强迫我准确无误,我可以建议你如何使用这种匹配来达到你的目的(但所以你不要让任何东西给OP想象:()

你可以将正则表达式分为3个正则表达式,一个用于第一部分(最终符号和整个部分),一个用于第一部分加上点符号,一个用于整数。

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

答案 1 :(得分:2)

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

$("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 :(得分:1)

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

var x = '0.00';
var y = '0.000.00';
x.match(/^[0-9]+\.*[0-9]*$/); 
y.match(/^[0-9]+\.*[0-9]*$/); // evaluates to null

答案 3 :(得分:0)

您可以使用插件或其他单独的库来进行表单验证。一个例子: http://www.geektantra.com/2009/09/jquery-live-form-validation/

如果您想手动处理,

正则表达式也可以使用。

答案 4 :(得分:0)

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

它很简单,但有一些带有负值的错误, 无论如何,它非常适合简单使用!

你可以这样使用它:

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