Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jquery和regex验证十进制字段?_Jquery - Fatal编程技术网

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

如何使用jquery和regex验证十进制字段?,jquery,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 (rege

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

$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*$/

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

首先,返回值不应该是相反的吗
true
如果测试成功,
false
否则

其次,
在正则表达式中表示“任何字符”。如果只想匹配一个点,请使用
\。

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

注意:当
按键运行时,该值似乎仍未更改,因此匹配的是旧值,而不是新值

更新:这不是一个理想的解决方案,但仍然有效-您可以使用中的代码来监视输入值的更改(尽管它使用轮询):


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

其次,
在正则表达式中表示“任何字符”。如果只想匹配一个点,请使用
\。

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

注意:当
按键运行时,该值似乎仍未更改,因此匹配的是旧值,而不是新值

更新:这不是一个理想的解决方案,但仍然有效-您可以使用中的代码来监视输入值的更改(尽管它使用轮询):


在@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;
    });
});

可以在这里测试:

在@elclans和@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;
    });
});


可以在这里测试:

是的,我注意到之后,我发布了。但是在Rubular.com上,这个(\+\124;-)?(\ d*\.\d*)与这个测试字符串一起工作:23.43 23。32 0.23 43.54 23-23-45.34-.43-0.34但现在我无法在文本字段中键入任何内容是的,我刚刚注意到(请参阅我的更新)。我们需要找到一种方法来检查更新的字符串…嗯。我必须检查jQueryAPI,如果你找到了更好的解决方案,请在这里发布,我也对它感兴趣。但是,请参阅我的更新以了解短期解决方法。我将使用当前函数进行更新。它的行为和我原来的问题一样,但我感觉好多了。是的,我注意到之后,我发布了。但是在Rubular.com上,这个(\+\124;-)?(\ d*\.\d*)与这个测试字符串一起工作:23.43 23。32 0.23 43.54 23-23-45.34-.43-0.34但现在我无法在文本字段中键入任何内容是的,我刚刚注意到(请参阅我的更新)。我们需要找到一种方法来检查更新的字符串…嗯。我必须检查jQueryAPI,如果你找到了更好的解决方案,请在这里发布,我也对它感兴趣。但是,请参阅我的更新以了解短期解决方法。我将使用当前函数进行更新。它的行为和我原来的问题一样,但我感觉好多了。这样做有什么不对?(\+\124;-)?(\ d*.\d*)这使得小数点是可选的,但小数点本身仍然可以存在。我没有检查实际代码,但它似乎是正确的,我只是从中复制/粘贴。显然,问题是我没有在输入文本后进行测试,或者其他什么。为什么需要在
按键
事件中进行测试?我一直在尝试解决方案,但它变得复杂了。基本上,第一个字符和
会被拒绝。我尝试了
keyup
,它似乎解决了第一个字符的问题,但没有解决
。只需一个按钮就可以更容易地进行验证…看看只检测数字和用类似于if((e.which>=48&&e.which这样做有什么不对?\+\124;-)?(\ d*\.\d*)的
按键
怎么办这使得小数点是可选的,但小数点本身仍然可以存在。我没有检查实际代码,但它似乎是正确的,我只是从中复制/粘贴。显然,问题是我没有在输入文本或其他内容后进行测试。为什么需要在
按键
事件中执行此操作?我一直在尝试解决此问题但它变得复杂了。基本上,第一个字符和
被拒绝。我尝试了
键控
,它似乎解决了第一个字符的问题,但解决不了
。只需一个按钮就可以更容易地进行验证…看看如何只检测数字和
按键
上的
类似于
if((e.which>=48&&e.which Type
+
,在它前面单击,键入
2
。我想你在不阻止所有情况下无效输入的情况下让用户的生活更加困难。但是我已经提出了我的意见,如果你真的喜欢
按键
方法,那就去吧。哦,为了这个,我只需要找到一种不允许打字的方法ng在+或-Type
+
之前,单击它,在它之前键入
2
。我想你是在增加用户的生活难度,同时又不阻止所有情况下的无效输入。但我已经提出了我的意见,如果你真的更喜欢
按键
方法,那就去吧。哦,好吧,我只需要找到一种方法,在e a+或-