2016-11-29 216 views
2

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

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

+1

尝试'.replace(/ ^([\:\] \ :) | [^ \ w \ s]/g,function($ 0,$ 1){return $ 1?$ 1.replace(/ [^ \ w \ s ] +/g,'')+':':'';})''而不是'.replace(/ [^ \ w \ s]/gi,'') –

回答

2

根据您当前的代码,您正在寻找替换不是字母,数字或空格字符的所有内容。

这就是说,正则表达式[^\w\s:]应该工作。

\w =包括AZ,az,0-9

\s =空格字符\ r \ n \ t \˚F符\ v

我甚至会考虑取消\s,因为它会在允许你的空间输入,除非这是你的意图。

+0

不,我不想让空格被允许。我只想让冒号与\ w = a-z一起被允许,A-Z,0-9 – Praveen

+0

好的,那么你只想使用'[^ ​​\ w:]'。 '\ s'匹配空白字符。 – jj27

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+字符比:: ,OR将匹配任何不是单词或空白的字符。如果组1匹配,则从字符和空白字符以外的字符中除去全部内容,并且添加:,否则删除与[^\w\s]匹配的字符。

+0

我不想太空白。有没有办法,我可以做到这一点 – Praveen

+0

你想删除所有空白?我编辑了答案。主要点在于用'\ W'替代'[\ w \ s]'作为'\ W'匹配除字词之外的任何内容,而'[^ \ w \ s]'匹配除字之外的任何字符,一个空白字符。 –

相关问题