javascript函数在html输入文本字段中避免两个小数点(例如:12.1.1)

javascript function to avoid two decimal points (ex: 12.1.1 ) in html input text field

本问题已经有最佳答案,请猛点这里访问。

有人能帮我找到一个解决方案来验证文本字段是否接受有效的十进制数吗?我试过类似的东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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;
    }
}


让我们简单点:

1
2
3
4
5
6
var txtbx = document.getElementById("txt");

txtbx.addEventListener("keyup",function(e) {
  var parsed = parseFloat(txtbx.value)||0;
  if(parsed!=txtbx.value) txtbx.value = parsed;
});


如果只需要十进制数,那么一个简单的regex就足够了:

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

在英语中,这意味着

    >>:从输入开始。 >->:可选负号。 >[1-9>:第一个字符必须?wyn>>1e>范围内的数字(即没有前导零)。 >[0-9e>,?wyn>>de>范围内必须跟零位或多位数字。 >(.[0-9]de>:可以选择后面跟一个小数点和一个或多个?wyn>ode>范围内的数字。
  • 以东十一〔八〕到了这里,一定是号码的末尾。