2016-12-09 23 views
-3

現在、電子メールの検証に正規表現を使用するためにknockoutにバインディングハンドラを作成しています。これは、RFC 2822に準拠した正規表現を使用して行われます。私は正規表現(「MY_REG_EXP」)JavaScript Email Validation with Regex

MY_REG_EXP = [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? 

しかし、私が先頭に単一引用符(コードの品質の目的)を使用しておりますので、結合ハンドラは、アップデートの内容を検証していない原因になっているを使用しようとしています

ko.bindingHandlers.emailInput = { 
     init: function(element, valueAccessor, allBindingsAccessor, bindingContext) { 
      ko.bindingHandlers.textInput.init(element, valueAccessor, allBindingsAccessor, bindingContext); 
     }, 

     update: function(element, valueAccessor) { 
      $(element).on('keydown', function (event) { 
       if (event.keyCode === 32) { 
        event.preventDefault(); 
       } 
      }); 

      var value = ko.unwrap(valueAccessor()), 
       regex = new RegExp('^[a-z0-9!#$%&/\'*+/=?^_`{|}~-]+(?:\/.[a-z0-9!#$%&/\'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\/.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$'); 
      if (value.trim() !== '' && !regex.test(value)) { 
       element.style.backgroundColor = '#EDB2B2'; 
      } else { 
       element.style.backgroundColor = 'white'; 
      } 
     } 
    }; 

私のアプローチに関するフィードバックは高く評価されます。

+0

"シングルクォートを使用しています(コード品質目的)_"シングルクォートがより良いコード品質であると考える理由を説明できますか? – csmckelvey

+0

一重引用符を使用することを選択した場合は問題ありませんが、文字列内で一重引用符をエスケープする必要がある場合は、その文字列に二重引用符を使用してください。盲目的にスタイルのガイドラインに従わないでください。 ___possible___のどこにのみ適用してください。 – Cerbrus

答えて

1

JavaScript正規表現の電子メールの検証は、少なくとも半年では時代遅れです。

<input type="email" /> 

完了。

+0

残念ながら、私も古いブラウザを使用しています。 –

+0

これも機能します。しかし、それがノックアウトフックでどのように振る舞うかはわかりません。 –

0

私は/ \エスケープ文字を使用してこれを修正しました。一重引用符チェックはビルドプロセスの一部であり、私は不必要に例外を作成したくありませんでした。

ko.bindingHandlers.emailInput = { 
     init: function(element, valueAccessor, allBindingsAccessor, bindingContext) { 
      ko.bindingHandlers.textInput.init(element, valueAccessor, allBindingsAccessor, bindingContext); 
     }, 

     update: function(element, valueAccessor) { 
      var value = ko.unwrap(valueAccessor()), 
       regex = new RegExp('[a-z0-9!#$%&/\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&/\'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?'); 
      if (value.trim() !== '' && !regex.test(value)) { 
       element.style.backgroundColor = '#EDB2B2'; 
      } else { 
       element.style.backgroundColor = 'white'; 
      } 
     } 
    }; 
+0

これは私が現在の電子メールボックスのために持ちたい解決策です –