2013-05-31 6 views
7

मेरे पास एक एप्लिकेशन के लिए साइन अप फॉर्म है, और कोणीय जेएस इसकी सत्यापन के लिए ज़िम्मेदार है।यूनिकोड वर्णों के साथ कोणीय जेएस ईमेल प्रमाणीकरण

मैं एक समस्या में भाग गया जब कोणीय जेएस उस ईमेल पते को स्वीकार नहीं कर रहा था जिसमें इसमें एस्ट्रोफ़े है। "Pear'[email protected]"

मुझे पता चला कि angularJs को ईमेल पते में यूनिकोड वर्ण पसंद नहीं हैं।

क्या कोई और इस तरह के मुद्दे पर आया है, मुझे कोणीय जेएस में इस बग को दूर करने के लिए अपने विकल्पों को जानने में दिलचस्पी है।

किसी भी इनपुट की सराहना की जाती है। धन्यवाद !

+1

क्या आपने कस्टम सत्यापन फ़ंक्शन लिखने पर विचार किया है? http://jsfiddle.net/adamdbradley/Qdk5M/ – shaunhusain

उत्तर

17

तो html5 <input type=email /> होने महत्वपूर्ण नहीं है, आप <input type=text /> और पैटर्न मान्यता

उपयोग कर सकते हैं
<input type="text" ng-model="field" ng-pattern="EMAIL_REGEXP" /> 

और आप रेगेक्स का उपयोग कर सकते हैं कि @ एंडी जोसलीन ने अपने उत्तर

में पोस्ट किया
$scope.EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-][email protected][a-z0-9-]+(\.[a-z0-9-]+)*$/i; 
+0

उपयोग कर सकते हैं REGEX जो आपने प्रदान किया है apostrophe मुद्दे को संबोधित नहीं करते हैं। मैंने angular.js फ़ाइल में REGEX में "" जोड़ा, और यह काम किया। मैंने इनपुट प्रकार को "टेक्स्ट" में भी नहीं बदला। – Nanu

+0

मैंने आपके उत्तर की जांच की, क्योंकि यह एनजी-पैटर्न के उपयोग से इन मुद्दों के साथ किसी की मदद कर सकता है। – Nanu

+0

किसी अभिव्यक्ति के बिना सीधे एनजी-पैटर्न में इस अभिव्यक्ति का उपयोग करते समय, \ \' को दो बार से बच जाना चाहिए क्योंकि यह स्ट्रिंग के भीतर एक अभिव्यक्ति है। '\\।' – Soviut

11

AngularJS परीक्षण ई-मेल को यह नियमित अभिव्यक्ति का उपयोग करता है: https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L4

क्या तुम कर सकते हो एक निर्देश है कि यह अपने आप की जाँच करता है लिखते हैं। बस AngularJS से एक कॉपी और अपने खुद के regexp का उपयोग करें: https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L606-L614

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

तो फिर तुम सिर्फ कर सकते हैं:

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

वैकल्पिक रूप से वह केवल '<इनपुट प्रकार = "टेक्स्ट" ng-model = "field" ng-pattern = "MYUNIEMALREGEX" /> ' – vittore

1

मैं सिर्फ Angular.js फाइल "('" अभिव्यक्ति में जोड़ा) में regex अद्यतन और यह काम किया, किसी अन्य बदलाव किए बिना।

EMAIL_REGEXP = /^[A-Za-z0-9._%+- '] @ [एक-zA-Z0-9 .-]। [A-zA-z] {2, 4} $ /। धन्यवाद Vittore, मुझे REGEX को अद्यतन करने का विचार देने के लिए। :)

0

आप अपरिभाषित क्यों लौटते हैं? समारोह के

पुनर्रचना:

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

कोणीय ईमेल आईडी में apostrophe (') का समर्थन नहीं करते। आप कोणीय में apostrophe मान्य करने के लिए की जरूरत है, तो आप से नियमित अभिव्यक्ति को बदलने की जरूरत:

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

करने के लिए:

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

यह पूरी तरह से काम करेंगे।

संबंधित मुद्दे