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

javascript函数,以避免html输入文本字段中出现两个小数点(例如:12.1.1),javascript,Javascript,谁能帮我找到一个解决方案来验证文本字段是否接受有效的十进制数。我试过类似的东西 function fun_AllowOnlyAmountAndDot(txt) { if (event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46) { var txtbx = document.getElementById(txt); var amount = document

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

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;
    }
}
函数fun\u AllowOnlyAmountAndDot(txt){
如果(event.keyCode>47&&event.keyCode<58 | | event.keyCode==46){
var txtbx=document.getElementById(txt);
var amount=document.getElementById(txt).value;
var当前=0;
var计数=0;
如果(金额指数(“.”,当前)|金额指数(“.”,当前+1)){
//警报('0');
}
/*如果(amount.length==2)
{
如果(event.keyCode!=46)
返回false;
}*/
做{
当前=金额指数(“.”,当前);
如果(存在!=-1){
计数++;
present++;
}
}
while(在场!=-1);
if(present=-1&&amount.length==0&&event.keyCode==46){
event.keyCode=0;
//警告(“不允许小数点位置错误!!”;
返回false;
}
如果(计数>=1&&event.keyCode==46){
event.keyCode=0;
//警报(“只允许一个小数点!!”;
返回false;
}
如果(计数=1){
var lastdigits=amount.substring(amount.indexOf(“.”+1,amount.length);
如果(lastdigits.length>=4){
//警报(“仅允许小数点后两位”);
event.keyCode=0;
返回false;
}
}
返回true;
}否则{
event.keyCode=0;
//警告(“仅允许带点的数字!!”;
返回false;
}
}

如果您只需要十进制数,那么简单的正则表达式就足够了:

function validateNumber(num) {
  return /^-?[1-9][0-9]*(.[0-9]+)?$/.test(num);
}
在英语中,这意味着

  • ^
    :从输入的开头开始
  • -?
    :可选负号
  • [1-9]
    :第一个字符必须是
    1-9
    范围内的数字(即无前导零)
  • [0-9]*
    必须后跟0-9范围内的零或多个数字
  • ([0-9]+)?
    :可以选择后跟小数点和范围
    0-9
    中的一个或多个数字
  • $
    :你在这里得到一个,它必须是数字的结尾
让我们做得简单一点:

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

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

这与我无关PHP@Farkie然后重新标记,不要向下投票。我从来没有向下投票过-我编辑并重新标记过。如果你只是想测试,如果输入是一个数字,你可以使用isNaN()或者你可以使用parseFloat()将输入解析为一个浮点数,谢谢Jan Turoň。。找到解决办法了吗