我正在尝试检查jquery中的on(“ keypress keyup blur”,function(event))函数中小数点前后的位数以及总位数。这对我不起作用。
我的html代码中有一个输入元素,用户应该在其中输入:
仅号码
小数点前最少0位和最多2位
小数点后的最小0和最大8位
仅小数点后一位
我试图使下面的该正则表达式 / ^ \ d {0,2}(。\ d {0,8})?$ /
对我来说似乎还可以,但是当我在代码中使用jquery尝试失败时,它允许用户在小数点前输入两位以上的数字
$("#longitude").on("keypress keyup blur",function (event) {
$(this).val($(this).val().replace(/[^\d\.].+/, ""));
if ((event.which < 46 || event.which > 57) || $(this).val().length>9 || $(this).val()===/^\d{0,2}(\.\d{0,8})?$/) {
event.preventDefault();
}
});
我希望它不允许在键入自己的数字时在两位数之后按一个键(如果没有十进制)。如果用户输入小数,则应允许再输入8位数字
有效字符串(十进制前的最小0和最大以及十进制和十进制的最小0和最大8是可选的):
12.12345678
1.12345678
.12345678
12.12345
1.1234
.123456
12
1
无效字符串是
123.12345678
123.123456789
12.12.12
答案 0 :(得分:1)
而不是检查的数量event.which
你可能会使用一个正则表达式,而不是在打字时纠正输入时输入了什么东西不符合要求的结构。然后,当发生,你可以用最后一个已知有效的输入替换错误的输入。
请注意,你要允许0-2个数字,一个点和0-8的数字,其在最大11个字符,所以我觉得这个$(this).val().length>9
应该是11。
由于先前的模式在末尾也允许单个点,因此例如在提交表单时,您可以使用此正则表达式检查最终值,该正则表达式检查该值是否为1-2位数字,后跟一个点和1 -8位数字或|
点和1-8位数字,并且不接受空字符串。
^(?:\d{1,2}(\.\d{1,8})?|\.\d{1,8})$
let lastValid = "";
$("#longitude").on("keypress keyup blur", function(event) {
if (/^\d{0,2}(?:\.\d{0,8})?$/.test($(this).val())) {
lastValid = $(this).val();
} else {
event.preventDefault();
$(this).val(lastValid);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="" name="">
<input type="text" value="" id="longitude">
</form>
答案 1 :(得分:0)