如何使用jquery和regexvalidation十进制字段?

这是我到目前为止:

$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; } }); 

但由于某种原因,文本字段只允许一个字符……而不是一个数字

这会检查十进制数字,并带有可选的+/-符号字符。 在谷歌发现不到5秒。 /^\s*(\+|-)?((\d+(\.\d+)?)|(\.\d+))\s*$/

首先,回报不应该相反吗? 如果测试成功则为true ,否则为false

第二, . 正则表达式中的意思是“任何字符”。 如果只想匹配一个点,请使用\.

这样你的正则表达式就可以了。 但是,为了获得更好的结果,请使用elclanrs提供的正则表达式。

注意:当keypress运行时,值似乎仍未改变,因此它是匹配的旧值,而不是新值。

更新 :这不是一个理想的解决方案,但仍然可以工作 – 您可以使用此问题中的代码来监视输入值的变化(但它使用轮询):

 $(element).watch("value", function(propName, oldVal, newVal) { var regex = /^(\d*\.?\d*)$/; if (!regex.test(newVal)){ $(this).val(oldVal); } }); 

在@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/