2016-12-09 105 views
-3

我目前正在編寫一個綁定處理程序在挖空使用正則表達式來驗證電子郵件。這是使用符合RFC 2822的正則表達式完成的。JavaScript電子郵件驗證與正則表達式

我想使用正則表達式(「MY_REG_EXP」)

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

「_I使用單引號(代碼質量目的)_」你能解釋爲什麼你認爲單引號是更好的代碼質量? – csmckelvey

+0

如果您選擇使用單引號,這很好,但如果這意味着您必須在字符串中轉義單引號,請改爲使用雙引號。不要盲目遵循風格指南。只適用於___可能_____的地方。 – 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

這是我希望爲當前電子郵件框提供的解決方案 –

相關問題