简体   繁体   English

Javascript仅在ASP.NET TextBox中输入带有三位小数的正或负十进制数

[英]Javascript to enter only positive or negative decimal number with 3 decimal places into a ASP.NET TextBox

I have one TextBox in my UserControl. 我的UserControl中有一个TextBox。 Here I want enter only positive or negative decimal number with three decimal places. 在这里,我只想输入带有三个小数位的正或负十进制数。 For example like below: 128.324, -23.453, 10, 0.453, -2, 2.34, -5.34 The TextBox should not allow to enter other characters. 例如如下:128.324,-23.453、10、0.453,-2、2.34,-5.34 TextBox不允许输入其他字符。 How to do this using JavaScript? 如何使用JavaScript做到这一点? I am not good enough in JavaScript. 我的JavaScript不够好。

A regular expression to check content would be something like: 用于检查内容的正则表达式将类似于:

var re = /^[+-]?[\d,]+(\.\d{3})?$/;

but that will not enforce a comma for thousands, only allow it somewhere in the integer part. 但这不会强制使用数千个逗号,而只能将其放在整数部分的某个位置。 Note that in some countries, a comma is used for the decimal point. 请注意,在某些国家/地区,逗号用作小数点。

If you validate on change your should be alright. 如果您对变更进行验证,则应该没事。 Make sure you also validate any data that is sent to the server, on the server, since any data can be sent no matter how you try to validate it with JS: 确保您还验证了服务器上发送到服务器的所有数据,因为无论您如何尝试使用JS进行验证,任何数据都可以发送:

var input = document.getElementById('tehinput');
input.onchange = function(){
    var val = this.value, sign = '';
    if(val.lastIndexOf('-', 0) === 0){
        sign = '-';
        val = val.substring(1);
    }
    var parts = val.split('.').slice(0,2);
        if(parts[0] && parseInt(parts[0], 10).toString() !== parts[0]){
        parts[0] = parseInt(parts[0], 10);
        if(!parts[0])
            parts[0] = 0;
    }
    var result = parts[0];
    if(parts.length > 1){
        result += '.';
        if(parts[1].length > 3 || 
          parseInt(parts[1], 10).toString() !== parts[1]){
              parts[1] = parseInt(parts[1].substring(0,3), 10);
              if(!parts[1])
                  parts[1] = 0;
        }
        result += parts[1];
    }
    this.value = sign+result;
}

JSFiddle JSFiddle

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM