Javascript 输入筛选器正则表达式单十进制,仅允许0或5
我有一个输入过滤器函数,如下所示:Javascript 输入筛选器正则表达式单十进制,仅允许0或5,javascript,regex,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;
(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));
当前im使用此正则表达式模式:
^\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 tester站点上似乎是正确的,但当应用到输入过滤器时,它只允许我输入0和5,而不允许输入其他数字和点
更新1:添加了JSFIDLE链接
在您的模式^\d*[,]?\d{0,1}[05]$中,任何帮助都是非常好的。$前3个部分是可选的,因此它只能匹配单个0或5
\d{0,1}允许一个数字0-9后跟0或5
如果您想允许键入,可以使用
^\d+\.?[05]?$
然后,在处理数据时执行另一个验证,以验证整个模式是否匹配1+个数字,以及使用字符类匹配点和数字0或5的可选部分
^\d+(?:\.[05])?$
^字符串开头
\d+匹配1+个数字
?:\.[05]? 可选地匹配一个点和0或5
$字符串结尾
这个怎么样
^\d+(?:[\.,][05]0*)?$
它不允许我输入点。不能说这个不起作用,但他似乎指定逗号和点都是有效的分隔符,那么1.50呢?我猜这也是对他的输入的一个有效答案。@Teddybugs如果你想键入它,你可以使用^\d+\.?[05]?$,但请注意,它也将只匹配一个像1这样的点的数字。在处理数据时,您可以使用此模式并使用答案中的模式进行另一次检查。@NoureldeanSwearky也许这也是允许的,只有问题状态的标题只允许0或5,并且示例数据中没有逗号。@Thefourthbird True,它不必在5之后允许0,这很公平,但是逗号是在他当前的正则表达式中指定的,即使在他的示例中没有指定。