使用正则表达式将数字替换为小数点后 3 位



我只需要替换小数点到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;  
            }  
        });  
    }  
}});

这是我的网页:

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

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

可以使它删除代码,请注意,当.在字符集中时(在 [] 之间(不需要转义

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;  
                }  
            });  
        }  
    }  
});
请注意,在小

数点分隔符后跟三位数字后,无法插入数字,但我们无法检查数字插入的位置,即使它位于前面。

最新更新