2016-12-09 1 views
-3

Ich schreibe gerade einen Binding-Handler in Knockout, um den regulären Ausdruck zu verwenden, um die E-Mail zu validieren. Dies geschieht mit dem RFC 2822-konformen Regex.JavaScript E-Mail-Validierung mit Regex

Ich versuche RegExp zu verwenden (‚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])? 

Aber da ich Apostrophe bin mit (Code-Qualität Zweck) zu Beginn es verursacht die Bindung Handler nicht die Inhalte auf Updates zu belegen .

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'; 
      } 
     } 
    }; 

Jede Rückmeldung über meinen Ansatz wird geschätzt.

+0

"_Ich verwende einfache Anführungszeichen (code quality purpose) _" Können Sie erklären, warum Sie einzelne Anführungszeichen als bessere Codequalität betrachten? – csmckelvey

+0

Es ist in Ordnung, wenn Sie einfache Anführungszeichen verwenden, aber wenn das bedeutet, dass Sie einfache Anführungszeichen in einer Zeichenfolge flüchten müssen, verwenden Sie stattdessen doppelte Anführungszeichen für diese Zeichenfolge. Befolgen Sie nicht blind die Stilrichtlinien. Wenden Sie sie nur dort an, wo ___möglich__. – Cerbrus

Antwort

1

JavaScript Regex E-Mail-Validierung ist seit mindestens einem halben Jahrzehnt obsolet.

<input type="email" /> 

Fertig.

+0

Leider bin ich auch mit älteren Browsern. –

+0

Das funktioniert auch. Aber nicht sicher, wie es sich mit den KO-Haken verhält. –

0

Ich habe das mit den/\ Escape-Zeichen behoben. Einfache Anführungszeichen sind Teil unseres Build-Prozesses und ich wollte keine Ausnahme unnötig machen.

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

Dies ist die Lösung, die ich für die aktuelle E-Mail-Box haben möchte –