javascript只允许负数和正数以及按键数十进制最多6位数

时间:2015-04-29 11:51:00

标签: javascript razor

我需要验证我的cshtml页面中的文本框,只接受负数或正数以及最多6位小数。这是我到目前为止所尝试过的。

function AcceptUptoSixDecimalPlacesWithNegative(event, elem) {

if ((event.which != 46 || $(elem).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
    if (event.keyCode !== 8 && event.keyCode !== 46 && event.keyCode !== 9 && event.keyCode !== 0 && event.keyCode !== 45) { //exception
        event.preventDefault();
    }
}

var text = $(elem).val();

if ((text.indexOf('.') != -1) && (text.substring(text.indexOf('.')).length > 6)) {
    if (event.keyCode !== 8 && event.keyCode !== 46 && event.keyCode !== 9) { //exception
        event.preventDefault();
    }
}

这有助于我在小数点后达到六位数,但它也允许所有特殊字符和字母表。

对此问题的任何帮助都将不胜感激。

感谢。

4 个答案:

答案 0 :(得分:2)

您可以使用Regex检查值:

var re = /^-?\d*\.?\d{0,6}$/; 
var text = $(elem).val();

var isValid = (text.match(re) !== null);

正则表达式意味着:

^:字符串的开头

- ? :一个或零“ - ”

\ d *:0到无限数字

\。? :0或1“。”

\ d {0,6}:从0到6个数字

$:字符串结尾

答案 1 :(得分:1)

您可以使用JavaScript的isNaN()功能。

&#13;
&#13;
var inputPrevValue = "";

$(document).ready(function () {
    $("#numbersOnly").change(function () {
        if (isNaN($(this).val()) || $(this).val().length > 6) {
            $(this).val(inputPrevValue);
        } else {
            inputPrevValue = $(this).val();
        }
    });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type="text" id="numbersOnly">
&#13;
&#13;
&#13;

这是一个(非常简单的)示例,用于测试输入的长度是否小于6个字符。如果没有,它会将其恢复到最后可接受的值。

答案 2 :(得分:0)

以下列出了有助于您提问的功能:

  1. Math.sign()检查其是否为正0 /负0和NaN
  2. Number MDN包含数字函数列表
  3. parseFloat()
  4. 计算十进制postregex之后的数字,即。 \ d +([。\ d {1,6}] *)\
  5. 在您的上下文中,以下示例中的验证组合:

    let x = elem;
    if(Math.sign(x) === 1 || Math.sign(x) === -1) && ...
    // decimal validations
    

    希望这有帮助。

答案 3 :(得分:-1)

  1. 不要验证按下的按键。有很多方法可以改变输入 值。处理oninput事件。
  2. 您可以将值视为字符串并使用a进行验证 正则表达式,但我认为结合字符串和数字相关更好 功能
  3. 例如:

    <input type="number" step="any" oninput="validate(this)" />  
    
    function validate(input){
      var number = parseFloat(input.value);
      if( number == input.value && input.value.length <= number.toFixed(6).length ){ /* valid! */ }
    }
    

    http://jsfiddle.net/tto2yvwj/