2011-11-19 11 views
9

मान्य करने के लिए NSRegularExpression कक्षा का उपयोग करना चाहते हैं यदि NSString एक ईमेल पता है तो सत्यापित करने के लिए कक्षा का उपयोग करना चाहते हैं।NSRegularExpression ईमेल

कुछ इस स्यूडोकोड की तरह:

- (BOOL)validateMail : (NSString *)email 
{ 
    NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"" options:NSRegularExpressionCaseInsensitive error:NULL]; 

    if(emailValidated) 
    { 
     return YES; 
    }else{ 
     return NO; 
    } 
} 

लेकिन मैं नहीं जानता कि कैसे वास्तव में मैं एक NSString को मान्य करता है, तो यह इस एक "[email protected]"

संभवतः किसी ने मेरी मदद कर सकते की तरह लग रही है यहाँ।

अभिवादन s4lfish

उत्तर

31

आप उपयोग कर सकते हैं:

@"^[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$"; // Edited: added^and $ 

आप इसे यहां से परीक्षण कर सकते हैं:

http://gskinner.com/RegExr/?2rhq7

और इस लिंक को बचाने यह भविष्य में Regex के साथ तुम्हारी मदद करेगा :

http://gskinner.com/RegExr/

संपादित

आप इसे इस तरह से कर सकते हैं:

NSString *string = @"[email protected]"; 
NSString *expression = @"^[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$"; // Edited: added^and $ 
NSError *error = NULL; 

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:&error]; 

    NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])]; 

    if (match){ 
     NSLog(@"yes"); 
    }else{ 
     NSLog(@"no"); 
    } 
+2

वाह जो गन्दा दिखता है –

+0

धन्यवाद, लेकिन मेरी समस्या यह है कि मुझे यह साबित करने के लिए कोई फ़ंक्शन नहीं मिला कि दर्ज ईमेल रेगेक्स फिट बैठता है। मैंने सेब के प्रलेखन में देखा है, लेकिन किसी भी तरह NSRegularExpression में कोई फ़ंक्शन नहीं है जो मेरे "if-statement" के लिए बूलियन मान देता है। – s4lfish

+2

हाय मैंने इसके लिए एक कोड नमूना जोड़ा है। और बीटीडब्ल्यू @ एलेक्स निकोल यह बहुत अच्छा होगा अगर आप अपनी टिप्पणी समझा सकते हैं। मैं अपने जवाब में गलत हो सकता हूं लेकिन आपकी टिप्पणी की खुराक मेरी मदद नहीं करती है या कोई और इस मुद्दे को बेहतर समझता है। – shannoga

8

यह एक पुराना सवाल था, लेकिन यह पर्याप्त सामान्य कभी नहीं शैली से बाहर जाना है।

99.9% ईमेल पता regexs गलत हैं और यहां तक ​​कि कम से कम अंतरराष्ट्रीय डोमेन (आईडीएन) को संभालते हैं।

एक व्यापक ईमेल रेगेक्स बनाने की कोशिश विकास समय या उपयोगकर्ता सीपीयू चक्र का अच्छा उपयोग नहीं है। [^@][email protected]([^@]+)

  • का मिलान नहीं हुआ हिस्सा प्रति डोमेन निकालें

    1. मैच:

      यह बहुत सरल है।

    2. विफल होने पर यह एक प्रतिबंधित डोमेन से मेल खाता है। जेएसओएन एंडपॉइंट से स्थानीय रूप से प्रतिबंधित डोमेन की सूची कैश करें ताकि आपको पुनः अनुमोदन के लिए इंतजार न करना पड़े और इसे फ्लाई पर अपडेट कर सकें। (रूपांतरण विश्लेषण के लिए वेब आंकड़ों को लॉग करना सुनिश्चित करें।)

    3. जांचें कि डोमेन में DNS रिकॉर्ड्स हैं। एमएक्स के अलावा ए और एएएए की जांच करें, क्योंकि सभी डोमेन एमएक्स लागू नहीं करते हैं। (लंगड़ा लेकिन सच।)

    4. बस पहले ही ईमेल भेजने का प्रयास करें। यदि उपयोगकर्ता को लगता है कि ऐप का मूल्य है तो उपयोगकर्ता फिर से प्रयास करेगा। :))

  • +0

    सहमत हैं, शीर्ष-स्तरीय डोमेन 4 से अधिक हो सकता है, जैसे 'समुदाय',' गुण'। सख्त से ज्यादा कुछ भी नहीं है। – chao787

    0

    स्विफ्ट 4 संस्करण

    मैं जो ईमेल नियमित अभिव्यक्ति के लिए स्विफ्ट 4 संस्करण क्या कर रहे हैं के लिए यह लिख रहा हूँ। इस प्रकार ऊपर किया जा सकता है:

    do { 
         let emailRegex = try NSRegularExpression(pattern: "^[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$", options: .caseInsensitive) 
         let textRange = NSRange(location: 0, length: email.count) 
         if emailRegex.firstMatch(in: email, options: [], range: textRange) != nil { 
          //Do completion code here 
         } else { 
          //Do invalidation behaviour 
         } 
        } catch { 
         //Do invalidation behaviour 
        } 
    

    मान लिया जाये कि ईमेल एक तेज स्ट्रिंग टाइप किया था।