4

テキストフィールドを検証して有効な10進数を受け入れるための解決策を見つけるのを手伝ってくれる人はいますか? 私は何かを試しました

function fun_AllowOnlyAmountAndDot(txt) {
    if (event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46) {
        var txtbx = document.getElementById(txt);
        var amount = document.getElementById(txt).value;
        var present = 0;
        var count = 0;

        if (amount.indexOf(".", present) || amount.indexOf(".", present + 1)); {
            // alert('0');
        }

        /*if(amount.length==2)
              {
                if(event.keyCode != 46)
                return false;
              }*/
        do {
            present = amount.indexOf(".", present);
            if (present != -1) {
                count++;
                present++;
            }
        }
        while (present != -1);
        if (present == -1 && amount.length == 0 && event.keyCode == 46) {
            event.keyCode = 0;
            //alert("Wrong position of decimal point not  allowed !!");
            return false;
        }

        if (count >= 1 && event.keyCode == 46) {
            event.keyCode = 0;
            //alert("Only one decimal point is allowed !!");
            return false;
        }
        if (count == 1) {
            var lastdigits = amount.substring(amount.indexOf(".") + 1, amount.length);
            if (lastdigits.length >= 4) {
                //alert("Two decimal places only allowed");
                event.keyCode = 0;
                return false;
            }
        }
        return true;
    } else {
        event.keyCode = 0;
        //alert("Only Numbers with dot allowed !!");
        return false;
    }
}
4

2 に答える 2

1

簡単にしましょう:

var txtbx = document.getElementById("txt");

txtbx.addEventListener("keyup",function(e) {
  var parsed = parseFloat(txtbx.value)||0;
  if(parsed!=txtbx.value) txtbx.value = parsed;
});
于 2013-05-27T21:25:44.500 に答える
1

10 進数のみが必要な場合は、単純な正規表現で十分です。

function validateNumber(num) {
  return /^-?[1-9][0-9]*(.[0-9]+)?$/.test(num);
}

英語で、これは

  • ^: 入力の先頭から開始します。
  • -?: オプションのマイナス記号。
  • [1-9]: 最初の文字は範囲内の数字でなければなりません1-9(つまり、先行ゼロはありません)。
  • [0-9]*その後に範囲内の 0 個以上の数字が続く必要があります0-9
  • (.[0-9]+)?: オプションで、小数点と範囲内の 1 つ以上の数字を続けることができます0-9
  • $: ここに来ると、番号の末尾に違いありません。
于 2013-05-27T20:40:46.047 に答える