我正在使用此指令让用户只将数字键入输入标记。
app.directive('validNumber', function () {
return {
require: '?ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
if (!ngModelCtrl) {
return;
}
ngModelCtrl.$parsers.push(function (val) {
if (angular.isUndefined(val)) {
var val = '';
}
var clean = val.replace(/[^0-9\.]/g, '');
var decimalCheck = clean.split('.');
if (!angular.isUndefined(decimalCheck[0])) {
decimalCheck[0] = decimalCheck[0].slice(0, 10);
if (!angular.isUndefined(decimalCheck[1])) {
clean = decimalCheck[0] + '.' + decimalCheck[1];
}
else {
clean = decimalCheck[0];
}
//console.log(decimalCheck[0][0]);
}
if (!angular.isUndefined(decimalCheck[1])) {
decimalCheck[1] = decimalCheck[1].slice(0, 3);
clean = decimalCheck[0] + '.' + decimalCheck[1];
}
if (val !== clean) {
ngModelCtrl.$setViewValue(clean);
ngModelCtrl.$render();
}
return clean;
});
element.bind('keypress', function (event) {
if (event.keyCode === 32) {
event.preventDefault();
}
});
}
};
});
但是现在我想要这个,这意味着用户只能在第一个中键入“+”或“ - ”中的一个。
我想我必须改变这种模式var clean = val.replace(/[^0-9\.]/g, '');
我也尝试改为val.replace(/ [^ 0-9。+ - ] / g,'')。它工作但不正确,使用此模式,用户可以在输入字段的任何位置键入更多“+”和“ - ”。我只想让用户在第一个中只输入“+”或“ - ”中的一个,如“+1234”或“-1234”
答案 0 :(得分:0)
这比AngularJS更像是一个正则表达式问题,所以你可能会有更多的运气:https://stackoverflow.com/questions/tagged/regex
我会尽力帮助你。我认为你想要的正则表达式匹配单个+ - ,然后是任意数量的数字,然后可选的是小数点,然后是任意数量的数字。与之匹配的单个正则表达式是:
^[+-]?[0-9]*\.?[0-9]*
阅读有关群组和'?'运营商。这个正则表达式允许:
+.
-.
作为输入没有意义。您可以设计聪明的正则表达式以省略这些结果,但我认为以编程方式检查条目会更容易。
最后,网上很可能还有正则表达式可以帮助您解决任何比您更难理解的正则表达式问题。下次只需谷歌英文说明,看看你想要的是什么: