如何限制在jquery中输入最多十进制前2位和十进制后8位的任何数字

时间:2019-02-03 02:03:02

标签: jquery regex

我正在尝试检查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

2 个答案:

答案 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})$

Regex demo

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)

您可以使用以下内容。

^[0-9]{0,2}([.][0-9]{0,8})?$

示例

Try it here