将文本框限制为10位数,并在jquery中使用允许的小数

时间:2017-06-19 10:53:57

标签: javascript jquery

我一直困在一个问题上并且正在寻找它,但却找不到问题。 我有一个文本字段,我想允许10位数和十进制值,例如我允许的数字将是:

1.11
1234567890

10位数范围内的任何内容(在下面这些情况下都有问题)

12345678.13
123456789.05
1234567890.12

我已经可以将文本框限制为10位,但问题是如何在10位数后只允许2位小数。

我的代码是:

function CheckNumber(textBoxValue,evt){
  evt = (evt) ? evt : window.event;
   var charCode = (evt.which) ? evt.which : evt.keyCode;
   if (charCode == 8 || charCode == 37) {
  return true;
   } else if (charCode == 46 && textBoxValue.indexOf('.') != -1) {
  return false;
   } else if (charCode > 31 && charCode != 46 && (charCode < 48 || charCode > 57)) {
  return false;
   }
   console.log(charCode);
   if(textBoxValue.length){
    newVal = textBoxValue.split('.');
      console.log(newVal);

    if(newVal[0].length > 9){
      if(charCode == 46){
         return true;
      }
      return false;
    }
   }
   return true;
}

7 个答案:

答案 0 :(得分:1)

嗯,为什么不使用正则表达式呢?这是一个工作小提琴:

https://jsfiddle.net/L18d0qut/3/

修改

我相应地更改了代码。这个小提琴适合你吗?

我修改了支票以符合您的标准。关键代码现在是:

$('#input').on('keyup', function(){

    var value = $(this).val();
    if(value.match(/^[0-9,.]*$/)) {

    if(value.indexOf(".") >= 0 || value.indexOf(",") >= 0){
        console.log("YAY, we have a float, so it is valid!");
    } else if(value.length <= 10) { 
        console.log("Valid!");
    } else {
        console.log("invalid!");
    }


    } else {
        console.log("Only numbers and . or , are allowed!");
    }
});

注意:这适用于包含.,的浮动数字。如果您不想这样,您只需在regexindexOf()方法中修改您的需求。

我检查输入的长度并通过正则表达式检查内容。这是你正在寻找的吗?

只需在控制台中查看结果: - )

答案 1 :(得分:1)

我修改了你的代码&amp;创造了这样的东西。

function CheckNumber(textBoxValue,evt){
 evt = (evt) ? evt : window.event;
  var charCode = (evt.which) ? evt.which : evt.keyCode;
  if (charCode == 8 || charCode == 37) {
    return true;
  } else if (charCode == 46 && textBoxValue.indexOf('.') != -1) {
    return false;
  } else if (charCode > 31 && charCode != 46 && (charCode < 48 || charCode > 57)) {
    return false;
  }
  //console.log(charCode);
  if(textBoxValue.length){
      newVal = textBoxValue.split('.');
      /*console.log(newVal[1]);*/
        if(typeof(newVal[1])!='undefined'){
            if(newVal[1].length !=2){
                return true;
            }else{
                return false;
            }
        }

        if(newVal[0].length > 9){
            if(charCode == 46){
                return true;
            }
            if((charCode >= 48 || charCode <=57) && newVal[0].length == 10 && textBoxValue.indexOf('.') != -1 ){
                if(newVal[1].length !=2){
                    return true;
                }else{
                    return false;
                }
            }       
          return false;
        }
  }
  return true;

}

答案 2 :(得分:0)

您可以查看

if(newVal[1].length > 2){
 // your code
}

答案 3 :(得分:0)

试试这个:

function IsValid(input) {
    return (/^\d{0,10}(\.\d{0,2})?$/).test(input);
}

这允许10位数和2位(可选)小数。输入必须是字符串。

答案 4 :(得分:0)

试试这个..............

function CheckNumber(textBoxValue,evt){
    var a = textBoxValue.replace('.', '');
    if(a.length <= 10){
        console.log("valid");
    } else {
        console.log("invalid");
    }
}

答案 5 :(得分:0)

此代码仅允许您使用两位小数和10位小数点前的数字

/ ^ \ d {0,12} (。\ d {0,2})?$ /;

您可以将文本框长度设置为{0,12},其中0:最小长度和12:最大长度

&#13;
&#13;
 function IsValidNumber(Number) {
            var expr = /^\d{0,12}(\.\d{0,2})?$/;
            return expr.test(Number);
        };
        function ValidateNumber() {
            var Number = document.getElementById("txtNumber").value;
            if (!IsValidNumber(Number)) {
                alert("Invalid number");
            }
            else {
                alert("Valid number.");
            }
        }
&#13;
 <input type="text" id="txtNumber" />
    <input type="button" id="btnValidate" value="Validate" onclick = "ValidateNumber()" />
&#13;
&#13;
&#13;

答案 6 :(得分:-1)

您是否使用正则表达式考虑了文本框输入模式?

pattern="\d{10}\.\d{2}$"

这样的东西