首页 > 解决方案 > 允许小数点后两位数

问题描述

嗨,我试图限制用户在小数点后输入 2 位数字。以下功能正在运行,但我无法修改最后两位数字。假设我输入了数字 3456.78,我想修改它不允许的 3456.68。

$('.PMT_AMT').keypress(function(event) {

  var $this = $(this);
  if ((event.which != 46 || $this.val().indexOf('.') != -1) &&
    ((event.which < 48 || event.which > 57) &&
      (event.which != 0 && event.which != 8))) {
    event.preventDefault();
  }

  var text = $(this).val();
  if ((event.which == 46) && (text.indexOf('.') == -1)) {
    setTimeout(function() {
      if ($this.val().substring($this.val().indexOf('.')).length > 3) {
        $this.val($this.val().substring(0, $this.val().indexOf('.') + 3));
      }
    }, 1);
  }

  if ((text.indexOf('.') != -1) &&
    (text.substring(text.indexOf('.')).length > 2) &&
    (event.which != 0 && event.which != 8) &&
    ($(this)[0].selectionStart >= text.length - 2)) {
    event.preventDefault();
  }
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<input type="text" class="PMT_AMT">

标签: javascriptjquery

解决方案


该解决方案创建了一个预测并针对它测试正则表达式。

$('.PMT_AMT').keypress(function(event) {
  if(!/^\d*(\.\d{0,2})?$/.test(
    this.value.slice(0, this.selectionStart)
    + String.fromCharCode(event.which)
    + this.value.slice(this.selectionEnd)
    )) event.preventDefault();
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<input type="text" class="PMT_AMT">


推荐阅读