我只需要替换小数点到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;
}
});
}
}
});
请注意,在小数点分隔符后跟三位数字后,无法插入数字,但我们无法检查数字插入的位置,即使它位于前面。