2016-11-29 10 views
2

フォーム入力の検証にAngularJS指示文を使用しています。正規表現に数字とアルファベットとともに1つの特殊文字(:)を使用できるようにする方法があります。これは私が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

{return $ 1?$ 1.replace(/ [^ \ w \ s]/g、function($ 0、$ 1) .replace(/ [^ \ w \ s]/gi、 '')の代わりに –

答えて

2

あなたの現在のコードに基づいて、文字、数字、または空白文字以外のものをすべて置き換えようとしています。

つまり、正規表現[^\w\s:]は動作するはずです。

\w = AZ、AZ、0-9

\s =空白文字\ rを\ nは\トン\ 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, '')

次のデモを参照してください:/^([^:]*:)|[^\w\s]/g正規表現が::以外0+文字にマッチし、グループ1にキャプチャします

var s = "(*a word : 156,567-354 *)"; 
 
console.log(s.replace(/^([^:]*:)|\W/g, function($0,$1) { return $1 ? $1.replace(/\W+/g,'')+':' : ''; }));

をORは、単語または空白でない任意の文字に一致します。グループ1が一致すると、内容全体が単語と空白文字以外の文字から削除され、:が追加されます。そうでない場合、[^\w\s]の一致する文字は削除されます。

+0

私はあまりにも白いスペースをしたくないです。私はそれを行う方法がある – Praveen

+0

すべての空白を削除したいですか?私は答えを編集しました。主な点は、 '[^ \ w \ s]'は '\ W'を' \ W'に置き換えることですが、 '[^ \ w \ s]'は単語以外の文字にマッチします。空白文字。 –

関連する問題