限制为一个小数点

Limitting to one decimal point

本文关键字:一个 小数点      更新时间:2023-09-26

我需要阻止用户输入多个小数点,我已经有不允许符号和字母的代码,我想出了这个来阻止它允许多个小数点,但这不允许任何小数点。

function ValidateDecimal(o) {
    if (o.value.length > 0) {
        var objReg = /^'d+('.'d{1,2})?$/;
        if (objReg.test(o.value)) {
            o.style.backgroundColor = '';
            document.getElementById('submit').disabled = false;
        } else
            o.style.borderColor = 'red';
        o.style.fontWeight = 'bold';
        document.getElementById('submit').disabled = true;
        return false;
    }
}

代码中是否有任何人都可以发现的错误?

我查看了整个堆栈溢出,但没有找到适合我的解决方案。

else子句中需要大括号。正则表达式本身很好。

if (objReg.test(o.value)) {
    o.style.backgroundColor = '';
    document.getElementById('submit').disabled = false;
} else {
    o.style.borderColor = 'red';
    o.style.fontWeight = 'bold';
    document.getElementById('submit').disabled = true;
}

如果没有大括号,您的代码等同于这个代码(基本上总是禁用您的提交按钮):

if (objReg.test(o.value)) {
    o.style.backgroundColor = '';
    document.getElementById('submit').disabled = false;
} else {
    o.style.borderColor = 'red';
}
o.style.fontWeight = 'bold';
document.getElementById('submit').disabled = true;

您可以使用此代码

<form>
    <input type="text" id='myField' />
    <input type="submit" id="submit" value="Submit" />
</form>
<script>
var myField = document.getElementById('myField');
myField.addEventListener('input', function (prev) {
    return function (evt) {
        if (!/^'d+(?:'.'d{0,2})?$/.test(this.value)) {
          this.value = prev;
          this.style.borderColor = 'red';
          this.style.fontWeight = 'bold';
          document.getElementById('submit').disabled = true;
        }
        else {
          prev = this.value;
          this.style.borderColor = '';
          this.style.fontWeight = '';
          document.getElementById('submit').disabled = false;
        }
    };
}(myField.value), false);
</script>

(编辑)

根据您的评论,我已经编辑了适用于多个字段的答案。只需将类名添加到要在 javascript 中处理的输入字段

<form>
    <input type="text" class='decimalField'  />
    <input type="text" class='decimalField' />
    <input type="text" class='decimalField' />
    <input type="submit" id="submit" value="Submit" />
</form>
<script>
var decimalField = document.getElementsByClassName('decimalField');
for(var i = 0; i<decimalField.length; i++){
    decimalField[i].addEventListener('input', function (prev) {
        return function (evt) {
            if (!/^'d+(?:'.'d{0,2})?$/.test(this.value)) {
              this.value = prev;
              this.style.borderColor = 'red';
              this.style.fontWeight = 'bold';
              document.getElementById('submit').disabled = true;
            }
            else {
              prev = this.value;
              this.style.borderColor = '';
              this.style.fontWeight = '';
              document.getElementById('submit').disabled = false;
            }
        };
    }(decimalField[i].value), false);
}
</script>

这工作正常,感谢大家的帮助,这是 objReg 变量的问题,尽管它在 ie10 中的兼容模式下不起作用

   function ValidateDecimal(o) 
   {
        if (o.value.length > 0) 
        {
            var objReg = /^'d{0,20}(?:'.'d{0,2})?$/;
            if (objReg.test(o.value))
            {
                o.style.borderColor='';
                o.style.fontWeight='';
                document.getElementById('submit').disabled = false;
            }
            else
            {    
                o.style.borderColor='red';
                o.style.fontWeight='bold';
                document.getElementById('submit').disabled=true;
            }    
            return false;
        }
   } 

(编辑)

这个Javascript在IE兼容模式下很好,现在它在html中是一个问题,它不喜欢oninput,它需要在onkeyup上。我不得不使用 onkeyup,因为我已经在按键时调用了另一个函数,不允许字母和其他符号。