正则表达式只允许特殊字符(:)和数字和字母

时间:2016-11-29 17:55:39

标签: angularjs regex angularjs-directive

我正在使用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;
            });
        }
    }
});

我最后尝试添加冒号,但我无法达到我的解决方案。

2 个答案:

答案 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]匹配的字符。