如何在JQuery中完全验证十进制值

How to completely validate a decimal value in JQuery?

本文关键字:验证 十进制 JQuery      更新时间:2023-09-26

如何使用Jquery验证以下十进制值?

我已经创建了基本的小提琴,我可以验证号码。

我不允许用户输入任何其他数字,点(.)或逗号(,)(可互换),退格

<input type="text" class="myTexbox" />
JQUERY

$(document).ready(function () {
    $('.myTexbox').keypress(function (event) {
        return isDecimalNumber(event, this)
    });
});
function isDecimalNumber(eve, element) {
    var charCode = (eve.which) ? eve.which : event.keyCode
    if (
    (charCode != 8) //For Backspace Active
    &&
    (charCode != 44 || $(element).val().indexOf(',') != -1)
    //For comma
    &&
    (charCode != 46 || $(element).val().indexOf('.') != -1) && (charCode < 48 || charCode > 57))
    return false;
    return true;
}

完成小提琴:https://jsfiddle.net/s2t8fgn3/

你能帮我实现用户只能输入两个地方之后。或,如123.02 only和逗号或点一次插入不应该重复。

  • 要求:应该工作在IE 10 +

Update:我们还需要复制粘贴到它。那么如何管理数据是否为正确的十进制以及如何允许按CTRL+V而不是V

我会添加regexp check

$(element).val().toString().match("''.[0-9]{2,}$")

见https://jsfiddle.net/2fpcg0ee/

update:比较

前后值的不同方法
$(document).ready(function() {
    var oldVal = '';
    $('.myTexbox').keypress(function (event) {
        if (this.value.match("^[0-9]*[.,]?[0-9]{0,2}$"))
            oldVal = this.value;
    });
    $('.myTexbox').keyup(function (event) {
        if (!this.value.match("^[0-9]*[.,]?[0-9]{0,2}$")) {
            $('.myTexbox').val(oldVal);   
        }
    });
});  

见https://jsfiddle.net/2fpcg0ee/4/

我做了一些代码,我希望这是你想要达到的

function validateDecimal(num) {
    //goal: decimal number, only one [.,] allowed, only 2 digits after [.,]
    //first we check for invalid numbers
    var findInvalid = num.match(/[^0-9','.]/g);
    if(findInvalid) //found invalid chars
        return false;

    //now replace , to . (dot is more machinelike)
    var num = num.replace(/,/g,".");
    //now find number of occurences of .
    var count = (num.match(/'./g) || []).length;
    if(count > 1) 
        return false; //we have more than one . -> so its invalid
    //now we count the chars after the first .
    var indexOfDot = num.indexOf(".");
    if(indexOfDot == -1) 
        return true; //we have no dot - so its pure numeric (no decimal)
    var charsAfterDot = num.length - (indexOfDot+1);
    if(charsAfterDot > 2)
       return false; //we have more than 2 chars after dot - invalid
    return true; //every other case is valid
}

http://jsfiddle.net/7Ls7L3u9/& lt; & lt; & lt;摆弄