我正在使用AngularJS指令进行表单输入验证。有没有办法让我的正则表达式只允许一个特殊字符(:)以及数字和字母表。这是我在stackoverflow上找到的指令。
myapp.directive('noSpecialChar', function() {
return {
require: 'ngModel',
restrict: 'A',
link: function(scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function(inputValue) {
if (inputValue == null)
return ''
cleanInputValue = inputValue.replace(/[^\w\s]/gi, '');
cleanInputValue = cleanInputValue.toUpperCase();
if (cleanInputValue != inputValue) {
modelCtrl.$setViewValue(cleanInputValue);
modelCtrl.$render();
}
return cleanInputValue;
});
}
}
});
我最后尝试添加冒号,但我无法达到我的解决方案。
答案 0 :(得分:2)
根据您当前的代码,您希望替换不是字母,数字或空格字符的所有内容。
那就是说,正则表达式paintComponent(...)
应该有效。
[^\w\s:]
= a-z,A-Z,0-9
\w
=空格字符\ r \ n \ t \ f \ v
我甚至会考虑删除\s
,因为它会在您的输入中允许空格,除非您的意图。
答案 1 :(得分:1)
使用.replace(/^([^:]*:)|\W/g, function($0,$1) { return $1 ? $1.replace(/\W+/g,'')+':' : ''; })
代替.replace(/\W/gi, '')
请参阅以下演示:
var s = "(*a word : 156,567-354 *)";
console.log(s.replace(/^([^:]*:)|\W/g, function($0,$1) { return $1 ? $1.replace(/\W+/g,'')+':' : ''; }));

/^([^:]*:)|[^\w\s]/g
正则表达式将匹配并捕获到除:
和:
之外的组1 0+字符,或者将匹配任何不是单词或空格的字符。如果第1组匹配,则会从字和空白字符以外的字符中删除整个内容,并添加:
,否则将删除与[^\w\s]
匹配的字符。