我有一个输入过滤器函数,如下所示:
(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]$
它在正则表达式测试网站上似乎是正确的,但是当应用于输入过滤器时,它允许我仅键入 0 和 5,而不是其他数字和点 (.)
更新 1:添加了 JSfiddle 链接
任何帮助都会很棒
最佳答案
在您的模式 ^\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$
字符串结尾
关于javascript - 输入过滤器正则表达式单个小数仅允许 0 或 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58689251/