jQuery 仅带 2 位小数的数字仅带最大值

jQuery only numeric with 2 decimals only with max value

我一直在尝试为输入创建验证函数以仅允许带有两位小数且最大值为 99999999.99 的数字。

这是我迄今为止尝试过但似乎没有用的方法。

$('#TXTCOST').keypress(function (event) {
        if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
            event.preventDefault();
        }
        var input = $(this).val();
        if ((input.indexOf('.') != -1) && (input.substring(input.indexOf('.')).length > 2)) {
            event.preventDefault();
        }
        var arr = input.split('.');
        if (arr.length == 1 && parseFloat(arr[0]) >= 99999999) {
            event.preventDefault();
        }
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="TXTCOST"/>

这样试试。

$('#TXTCOST').keypress(function (event) {
        if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
            event.preventDefault();
        }
        else{
            
             var input = $(this).val();
             if ((input.indexOf('.') != -1) && (input.substring(input.indexOf('.')).length > 2)) {
                 event.preventDefault();
             }
             var arr = (input+String.fromCharCode(event.keyCode)).split('.');
             if (arr.length == 1 && parseFloat(arr[0]) > 99999999) {
                 event.preventDefault();
             }
        }
        
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="TXTCOST"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="TXTCOST"/>
$('#TXTCOST').keypress(function (event) {
    if ((event.which != 46 || $this.val().indexOf('.') != -1) &&
   ((event.which < 48 || event.which > 57) &&
   (event.which != 0 && event.which != 8))) {
       event.preventDefault();
}
    var input = $(this).val();
    if ((input.indexOf('.') != -1) && (input.substring(input.indexOf('.')).length > 2)) {
        event.preventDefault();
    }
    var arr = input.split('.');
    if (arr.length == 1 && parseFloat(arr[0]) >= 99999999) {
        event.preventDefault();
    }
});

试试这个

我下面的示例使用简单的正则表达式检查 1-8 位数字和可选的 0-2 个小数点:

编辑:现在代码可以防止输入错误的值。这是分两个阶段完成的

  • 按键时,备份当前输入值然后将用户输入限制为允许的键
  • 验证当前输入,如果新值无效,则恢复为旧值。

  let allowed_keys = [8, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 190];
let my_regex = /^([0-9]{0,8})(\.{1,1}[0-9]{0,2})?$/;
let old_val;
let x = $('#TXTCOST').on('keydown', function (event) {
    let input_value = $(this).val().toString();
    old_val = input_value;
    let found_dots = input_value.match(/\./g) || [];
    let split_input_value = input_value.split('.');
    let prevent_default = false;
    // console.log('value = ' + $(this).val());

    let tests = [];
    tests.push(() => {
        return allowed_keys.includes(event.which);
    });
    tests.push(() => {
        return (event.which !== 190) || ((event.which === 190) && (input_value.length > 0) && (found_dots.length === 0))
    });

    tests.forEach(function (test, index) {
        if (test() === false) {
            event.preventDefault();
        }
    });
}).on('input', function (event) {
    let input_value = $(this).val().toString();
    let tests = [];
    tests.push(() => {
        if (my_regex.test(input_value)) {
            return true;
        } else {
            return false;
        }
    });
    tests.forEach((test, index) => {
        if (test() === false) {
            $(this).val(old_val)
        }
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="TXTCOST"/>