如何使用jquery和regex验证十进制字段?

时间:2012-02-09 02:55:19

标签: jquery

这是我到目前为止所做的:

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

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

3 个答案:

答案 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/