这是我到目前为止所做的:
$j(element)..keypress(function(e){
var val = $j(this).val();
if (("1234567890.").indexOf(e.charCode) > -1){
if (val.length > 0){
var regex = /(\+|-)?(\d*\.\d*)/;
if (regex.test(val)){
return true;
} else {
return false;
}
} else {
return true;
}
} else {
return false;
}
});
但由于某种原因,文本字段只允许一个字符......而不是数字
答案 0 :(得分:2)
这会检查十进制数字,并带有可选的+/-符号字符。在谷歌发现不到5秒。
/^\s*(\+|-)?((\d+(\.\d+)?)|(\.\d+))\s*$/
答案 1 :(得分:2)
首先,回报不应该相反吗?如果测试成功,则true
,否则为false
?
其次,正则表达式中的.
表示“任何字符”。如果您只想匹配一个点,请使用\.
这样你的正则表达式就可以了。但是,为了获得更好的结果,请使用elclanrs提供的正则表达式。
注意:当keypress
运行时,值似乎仍未改变,因此它是匹配的旧值,而不是新值。
更新:这是不是理想的解决方案,但仍可正常工作 - 您可以使用this question中的代码来监视输入值的变化(但它使用了轮询):
$(element).watch("value", function(propName, oldVal, newVal) {
var regex = /^(\d*\.?\d*)$/;
if (!regex.test(newVal)){
$(this).val(oldVal);
}
});
答案 2 :(得分:0)
在@elclanrs和@mgibsonbr的帮助下,我来到了这里:
$j = jQuery.noConflict();
$j(function() {
$j("input").keypress(function(e) {
var val = $j(this).val();
var regex = /^(\+|-)?(\d*\.?\d*)$/;
if (regex.test(val + String.fromCharCode(e.charCode))) {
return true;
}
return false;
});
});
可在此处测试:http://jsfiddle.net/9U2Mw/5/