javascript - 输入过滤器正则表达式单个小数仅允许 0 或 5

标签 javascript regex

我有一个输入过滤器函数,如下所示:

(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,而不是其他数字和点 (.)

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

关于javascript - 输入过滤器正则表达式单个小数仅允许 0 或 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58689251/

相关文章:

c# - 我可以编写正则表达式来检查某些条件下的密码吗?

PHP preg_match : any letter but no numbers (and symbols)

Jquery 表单验证 - 电话号码

当我使用模板时,Javascript 函数不起作用

javascript 测试是否存在两个标志中的任何一个

javascript - 如何使用 lodash 对嵌套数组进行排序

python - 如何在Python中编码掉html和特殊字符?

javascript - 数组长度=未定义

javascript - Edge Animate 下层阶段的可访问性

ruby - 如何grep数组中与另一个数组中的模式匹配的元素?