我有一个输入过滤器功能看起来像这样:
(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