使用RegEx将数字替换为3位小数

时间:2018-01-16 05:19:10

标签: regex angularjs-directive

我只需要将十进制的数字替换为3个位置。 以下示例工作正常。 输出看起来像这样: 0.000

但我可以输入0 .. 我怎么能只做一个小数点(。)0.000

这是我的指示:

app.directive('allowDecimalNumbers', function () {  
return {  
    restrict: 'A',  
    link: function (scope, elm, attrs, ctrl) {  
        elm.on('keypress', function (event) {  
            var $input = $(this);  
            var value = $input.val();  
            value = value.replace(/[^0-9\.]/g, '')    
            if(value == "" && event.which == 46) {
                return false;
            }
            var findsDot = new RegExp(/\./g)  
            var containsDot = value.match(findsDot)  
            if (containsDot != null && ([46, 110, 190].indexOf(event.which) > -1)) {  
                event.preventDefault();  
                return false;  
            }  

            var arrValue = value.split('.');
            if (value.split('.').length == 2) {
                if(value.split('.')[1].length > 2) {
                    event.preventDefault();  
                    return false;
                }

            }   
            $input.val(value);  

            if (event.which == 64 || event.which == 16) {  
                // numbers  
                return false;  
            } 
            else if (event.which >= 48 && event.which <= 57 || event.which == 46) {  
                // numbers  
                return true;  
            } 
            else {  
                event.preventDefault();  
                return false;  
            }  
        });  
    }  
}});

这是我的HTML:

<input type="number" allow-decimal-numbers ng-model="length1" >

1 个答案:

答案 0 :(得分:0)

请注意,验证可能会导致问题,具体取决于区域设置,法语小数点分隔符为,,输入类型=&#34;数字&#34;阻止键入.

可以让它有效删除代码,请注意.在字符集([]之间)

var app = angular.module('app', []);  
app.directive('allowDecimalNumbers', function () {  
    return {  
        restrict: 'A',  
        link: function (scope, elm, attrs, ctrl) {  
            elm.on('keydown', function (event) {  
                var $input = $(this);  
                var value = $input.val();  
                if ([8, 13, 16, 27, 37, 38, 39, 40, 46].indexOf(event.which) > -1) {  
                    // backspace, enter, shift, escape, arrows, delete
                    return true;
                } else if ( (event.which >= 48 && event.which <= 57 || 
                        event.which >= 96 && event.which <= 105) && !value.match(/[.,]\d{3}/)) {  
                    // numbers
                    return true;
                } else if ([46, 110, 190, 188].indexOf(event.which) > -1  && !value.match(/[.,]/)) {  
                    // dot and numpad dot  
                    return true;  
                } else {  
                    event.preventDefault();  
                    return false;  
                }  
            });  
        }  
    }  
});

请注意,在小数点分隔符后跟三位数字后,不能插入数字,但即使它在前面,我们也无法检查数字的插入位置。\ n <\ n \ n <\ n < / p>