是否有任何现有的jQuery功能可以测试输入文本框的字符是数字还是数字有效?
如
.00
或0.00
,但不是0.00.00
或0a
我想要做的是在文本框中出现之前捕获任何无效字符。
如果jQuery无法实现,那么最好的方法是什么?
我知道使用JavaScript我可以测试isNaN()
然后返回false,但是当我必须考虑所有可能的击键时,这将开始变得毛茸茸。
答案 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]*/);
});
请注意我是如何从左到右检查数字的。这意味着+
必须有效。 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
});
});
上述示例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();