我需要设置输入才能只放置数字和一个点,例如111.111
而不是111..110....11
或11.11.11.11
。
这是因为我正在进行计算,如果用户在同一输入中输入多个点,则计算停止,我在指令中有这个
.directive('numbersOnly', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
ngModelCtrl.$parsers.push(function (inputValue) {
var transformedInput = inputValue.replace(/[^0-9\.]+/g, '');
if (transformedInput !== inputValue) {
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
}
return transformedInput;
});
}
}
})
所以我该怎么办
var transformedInput = inputValue.replace(/[^0-9\.]+/g, '');
更新
这是我尝试使用它的代码:https://jsfiddle.net/dado1ynj/4/
答案 0 :(得分:5)
答案 1 :(得分:3)
嗯,这取决于你接受的格式是什么。 使用/^(\d)(.)?(\d)$/将帮助您确保数字中只有一个点,但也接受没有小数点的数字或只是小数点。您也可以使用isNaN()来确保它是一个数字。
希望它适合你。
答案 2 :(得分:2)
我建议只测试1个以上的点。示例
(string.test(/\d\.\.?(\.+)/gm)) ? //do true : // do false;
test
检查字符串中是否存在,然后返回true或false。
正则表达式检查一个数字然后两个点或两个点+。它检查全局和多行。
然后,如果您坚持使用正则表达式来检查由一个点分隔的三个三位数组,则可以使用正则表达式
/(\d{3}\.\d{3}\.\d{3})\b/gm
答案 3 :(得分:2)
不是最优雅的解决方案,但它会根据用户类型检查输入,并且只允许带有一个小数的数字。
link: function (scope, element, attrs, ngModelCtrl) {
scope.currentValue = '';
element.bind('keyup',function(e) {
if( e.which!=8 && e.which!=0 && e.which!=46 && e.which != 190 && (e.which<48 || e.which>57)) {
element.val(scope.currentValue);
}
if(e.which != 8 && e.which != 0) {
var valToCheck = element.val();
var r = /^(\d*)\.{0,1}(\d*)$/
if (!r.test(valToCheck)) {
element.val(scope.currentValue);
} else {
scope.currentValue = element.val();
}
}
});
这个问题就是你看到一个字母中的用户类型,然后你看到它消失了。使用“keypress”而不是“keyup”可以更好地工作,但是你必须考虑用户在当前输入值的中间某处单击鼠标,然后键入以便它变得棘手。