我有一个输入过滤器功能看起来像这样:

(function($) {
$.fn.inputFilter = function(inputFilter) {
    return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
        if (inputFilter(this.value)) {
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
        } else if (this.hasOwnProperty("oldValue")) {
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
        }
    });
};
}(jQuery));


目前,我正在使用此正则表达式模式:

^\d*[.,]?\d{0,1}$


返回以下内容:

a        == false
1.0      == true
3.5      == true
1.1      == true
2.34     == false
11.0     == true
1.1      == true
1.2      == true
1.3      == true
1.5      == true
1.0      == true
2        == true


预期结果:

a        == false
1.0      == true
3.5      == true
1.1      == false
2.34     == false
11.0     == true
1.1      == false
1.2      == false
1.3      == false
1.5      == true
1.0      == true
2        == true


我尝试使用:

^\d*[.,]?\d{0,1}[05]$


在regex测试器网站上似乎是正确的,但是当应用于输入过滤器时,它只允许我键入0和5,而不是其他数字以及点(。)。

regextester Link here

更新1:添加了JSfiddle链接

Jsfiddle link

任何帮助都会很棒

最佳答案

在您的模式^\d*[.,]?\d{0,1}[05]$中,前3个部分是可选的,因此只能匹配一个0或5。

\d{0,1}允许一个数字0-9,后跟一个0或5。

如果希望能够键入,可以使用以下命令将点和末尾的0或5设为可选

^\d+\.?[05]?$


然后,在处理数据时进行另一次验证,以验证整个模式是否匹配1+位数字,并使用字符类来验证与点和数字0或5匹配的可选部分。

^\d+(?:\.[05])?$



^字符串开头
\d+匹配1个以上的数字
(?:\.[05])?(可选)匹配一个点和0或5
$字符串结尾


Regex demo

10-06 15:44