2013-05-31 14 views
7

Bir başvuru için bir kayıt formum var ve açısal js onaylamasından sorumlu.Unicode karakterlerle Açısal JS E-posta Doğrulaması

Angular j, içinde kesme işareti bulunan bir e-posta adresini kabul etmediğinde bir sorunla karşılaştım. "Pear'[email protected]".

AngularJs'in e-posta adresindeki unicode karakterleri sevmediğini öğrendim.

Böyle bir konuyla karşılaşan başka biri, angularJs'de bu hatadan kurtulmak için seçeneklerimi bilmek isterim.

Herhangi bir girdi takdir edilir. Teşekkürler !

+1

Özel bir doğrulama işlevi yazmayı düşündünüz mü? http://jsfiddle.net/adamdbradley/Qdk5M/ – shaunhusain

cevap

17

varsa, <input type=text /> ve desen doğrulama

kullanabilirsiniz
<input type="text" ng-model="field" ng-pattern="EMAIL_REGEXP" /> 

ve @Andy Joslin tarafından verilen regex ifadesini

numaralı yanıtında kullanabilirsiniz.
$scope.EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-][email protected][a-z0-9-]+(\.[a-z0-9-]+)*$/i; 
+0

'u kullanabilirsiniz. kesme olayına hitap ediyor. Angular.js dosyasında REGEX dosyasına "'" ekledim ve işe yaradı. Giriş türünü de "text" olarak değiştirmedim. – Nanu

+0

Cevabınızı kontrol ettim, çünkü ng-pattern'in kullanımı gibi konularda sorun yaşayan birine yardımcı olabilir. – Nanu

+0

Bu ifadeyi değişken olmadan ng deseninde doğrudan kullanırken, bir dizede WITHIN ifadesi olduğu için '\ .' iki kez çıkarılmalıdır. E-posta adresi – Soviut

11

angularjs Test e-posta bu normal ifadeyi kullanır: https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L4

Ne yapabileceğini kendiniz kontrol eden bir yönerge olduğunu. Sadece angularjs birini kopyalayıp kendi Regexp'i kullanın: https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L606-L614 Sonra

myApp.directive('nanuEmail', function() { 
    return { 
    restrict: 'A', 
    require: 'ngModel', 
    link: function(scope, elm, attrs, model) { 
     //change this: 
     var EMAIL_REGEXP = /^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/; 
     var emailValidator = function(value) { 
     if (!value || EMAIL_REGEXP.test(value)) { 
     model.$setValidity('email', true); 
     return value; 
     } else { 
     model.$setValidity('email', false); 
     return undefined; 
     } 
     model.$parsers.push(emailValidator); 
     model.$formatters.push(emailValidator); 
    } 
    }; 
}); 

tıpkı senin yapabilirsiniz: html5 <input type=email /> sahip kritik değildir

<input nanu-email ng-model="userEmail"> 
+2

Alternatif olarak, sadece ' – vittore

1

Sadece (ifadede "'" eklendi) angularjs dosyasında regex güncellenmiş ve herhangi başka bir değişiklik yapmadan, çalıştı.

EMAIL_REGEXP = /^[A-Za-z0-9._%+- '] +' [A-Za-Z0-9 .-] +. [A-Za-z] {2, 4} $ /. REGEX'i güncellemek için bana fikir verdiğiniz için teşekkürler Vittore. :)

0

neden tanımsız dönüyorsunuz? fonksiyonun

Refactoring:

var verificationEmail = function (viewValue) { 
    if ((typeof viewValue != "undefined") && viewValue != "") { 
    return regex.test(viewValue); 
    } 
}; 
0

Açısal e-posta Id içinde kesme işareti (') desteklemez. Eğer Açısal içinde kesme işareti doğrulamak gerekiyorsa, düzenli ifadeyi değiştirmek gerekir:

(/^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/) 

için:

/^[A-Za-z0-9._%+'-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/. 

Mükemmel çalışacaktır.