如何为带 trailing/leading 空格的输入启用 angularjs 1.0.x 验证指令?
How to enable angularjs 1.0.x validation directive for inputs with trailing/leading spaces?
我有一个使用正则表达式验证文本输入的指令。我想禁止用户输入 space 个字符。该指令适用于 spaces 内部文本,但当用户输入尾随或前导 spaces 时,验证不会触发。我知道 angular 自动 trims 文本输入,但我不能使用 ng-trim = "false" 指令,因为我的 angularjs 版本是 1.0 .6.有办法解决这个问题吗?
我已经尝试了 How to disable trimming of inputs in AngularJS? 对 angular 1.0.x 的建议,它部分有效 - 当用户粘贴包含尾随 space 的值时调用验证s,用"ctrl+v"或者鼠标,但是键盘输入还是没有触发验证。
自定义 ngTrim 指令,部分有效:
app.directive('ngTrim', function() {
return {
require: 'ngModel',
priority: 300,
link: function(scope, iElem, iAttrs, ngModel) {
if (iAttrs.ngTrim === 'false') {
ngModel.$parsers.unshift(function() {
return iElem.val();
});
}
}
}
});
如果您唯一想做的就是禁止输入空格,您可以将输入侦听器直接附加到元素,并在输入时删除空格,如下所示:
iElem.bind('input', (eventData) => {
if (eventData.data == ' ') {
iElem.val(iElem.val().replace(/\s/g, ''));
}
});
我有一个使用正则表达式验证文本输入的指令。我想禁止用户输入 space 个字符。该指令适用于 spaces 内部文本,但当用户输入尾随或前导 spaces 时,验证不会触发。我知道 angular 自动 trims 文本输入,但我不能使用 ng-trim = "false" 指令,因为我的 angularjs 版本是 1.0 .6.有办法解决这个问题吗?
我已经尝试了 How to disable trimming of inputs in AngularJS? 对 angular 1.0.x 的建议,它部分有效 - 当用户粘贴包含尾随 space 的值时调用验证s,用"ctrl+v"或者鼠标,但是键盘输入还是没有触发验证。
自定义 ngTrim 指令,部分有效:
app.directive('ngTrim', function() {
return {
require: 'ngModel',
priority: 300,
link: function(scope, iElem, iAttrs, ngModel) {
if (iAttrs.ngTrim === 'false') {
ngModel.$parsers.unshift(function() {
return iElem.val();
});
}
}
}
});
如果您唯一想做的就是禁止输入空格,您可以将输入侦听器直接附加到元素,并在输入时删除空格,如下所示:
iElem.bind('input', (eventData) => {
if (eventData.data == ' ') {
iElem.val(iElem.val().replace(/\s/g, ''));
}
});