2012-02-16 17 views
11

में ईमेल पते को मान्य करना मैं ईमेल पते वाले टेक्स्ट फ़ील्ड में सत्यापन करने की कोशिश कर रहा हूं।
उपयोगकर्ता को ईमेल पते में तीन बिंदुओं को डालने से रोकने के लिए स्ट्रिंग "emailRegEx" में क्या जोड़ा जाना है या मुझे इसके लिए विधि में क्या लिखना है।UITextField

- (BOOL)EmailValidationL:(NSString *)email 
{ 
    NSString *emailRegEx [email protected]"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}" 
    @"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" 
    @"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-" 
    @"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5" 
    @"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" 
    @"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" 
    @"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"; 

    NSPredicate *regExPredicate = 
    [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx]; 
    a= [regExPredicate evaluateWithObject:email]; 
    return a; 
} 
+0

संभावित डुप्ल के रूप में उपयोग कर सकते हैं आईओएस 2.0 पर उद्देश्य-सी में ईमेल पते को सत्यापित करने के लिए सर्वोत्तम प्रथाओं का टुकड़ा?] (http://stackoverflow.com/questions/800123/best-practices-for-validating-email-address-in-objective-c-on -ios-2-0) – zpasternack

+0

@zpasternack: मैं गतिशील रूप से मान्य करना चाहता हूं, उस उपयोगकर्ता को तीसरे बिंदु में प्रवेश नहीं करना चाहिए। अगर यह प्रवेश करता है तो उसे शून्य स्ट्रिंग द्वारा प्रतिस्थापित करें।उपरोक्त विधि QEndEditing-method – Ketan

+0

में मान्य है अब हमारे पास यूटीएफ -8 डोमेन नाम हैं, यह इन नियमित अभिव्यक्तियों को कैसे बदलता है? जैसे camtasia 教程 网 .com –

उत्तर

17

वहाँ बेहतर हैं ways एक ईमेल पता मान्य करने के लिए:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string. 

यहाँ मेरी कोड है।

- (BOOL)validateEmailWithString:(NSString*)email 
{ 
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
    return [emailTest evaluateWithObject:email]; 
} 
+0

मैं गतिशील रूप से मान्य करना चाहता हूं, उस उपयोगकर्ता को तीसरे बिंदु में प्रवेश नहीं करना चाहिए। अगर यह प्रवेश करता है तो उसे नल स्ट्रिंग द्वारा प्रतिस्थापित किया जाता है, ऊपर विधि QEndEditing-method – Ketan

8
NSString *emailReg = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailReg]; 

if ([emailTest evaluateWithObject:yourtextFieldName.text] == NO) 
{ 

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"enter the Valid Mail id" message:@"Please Enter Valid Email Address." delegate:nil cancelButtonTitle:@"okay" otherButtonTitles:nil]; 
[alert show]; 

} 

स्विफ्ट

var emailReg: String = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" 
var emailTest: NSPredicate = NSPredicate(format: "SELF MATCHES %@", emailReg) 

if emailTest.evaluateWithObject(yourtextFieldName.text!) == false { 
var alert: UIAlertView = UIAlertView(title: "enter the Valid Mail id", message: "Please Enter Valid Email Address.", delegate: nil, cancelButtonTitle: "okay", otherButtonTitles: "") 
alert.show() 
} 

Swift3

let emailReg = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" 
let emailTest = NSPredicate(format: "SELF MATCHES %@", emailReg) 
if emailTest.evaluate(withObject: yourtextFieldName.text) == false { 
UIAlertView(title: "enter the Valid Mail id", message: "Please Enter Valid Email Address.", delegate: nil, cancelButtonTitle: "okay", otherButtonTitles: "").show() 
} 
+0

ThnQ karthik में मान्य है, यह मेरी मदद करता है और एक आकर्षण की तरह काम करता है – ashokdy

5

इस regex (ईमेल पते में तीन बिंदु डालने से उपयोगकर्ता या लगातार डॉट्स के किसी भी संख्या को सीमित कर देगा), जैसे कि

[email protected] 

डॉट के साथ एक और नियम उपयोगकर्ता नाम है और डोमेन जैसे

[email protected] 

इंटरनेट में कई regexes अमान्य ईमेल पते की अनुमति देने के लिए शुरू या डॉट समाप्त नहीं होना चाहिए,। एक को अपनाने से पहले, आप इसे देखने के लिए कुछ अवैध ईमेल पते के साथ परीक्षण करने का प्रयास करना चाहेंगे, यह देखने के लिए कि क्या उन्हें अस्वीकार कर दिया गया है। आप यहां दो उदाहरणों का उपयोग कर सकते हैं जिन्हें मैंने यहां बताया है।

- (BOOL)isValidEmail:(NSString *)email 
{ 
    NSString *regex1 = @"\\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,4}\\z"; 
    NSString *regex2 = @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*"; 
    NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1]; 
    NSPredicate *test2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex2]; 
    return [test1 evaluateWithObject:email] && [test2 evaluateWithObject:email]; 
} 

validate email address using regular expression in Objective-C देखें।

+0

इसके लिए धन्यवाद, आपके 'regex1' परीक्षण ने मुझे कई बिंदुओं को सीमित करके बहुत परेशानी बचाई। एक बार फिर धन्यवाद! – rosshump

3

आईओएस पहले से ही विभिन्न डेटा प्रकारों के लिए डेटा डिटेक्टरों में अंतर्निहित है। हालांकि ईमेल उन प्रकारों में से एक नहीं है, लेकिन एक ईमेल पता एक लिंक के उप प्रकार के अंतर्गत आता है। यह जानते हुए कि, यह एक ईमेल पते के लिए जाँच करने के लिए आसान है:

NSError *error = nil; 
NSDataDetector *detector = 
    [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error]; 

NSString *string = @"[email protected]"; 
[detector enumerateMatchesInString:string 
          options:kNilOptions 
          range:NSMakeRange(0, [string length]) 
         usingBlock:^(NSTextCheckingResult *result, 
            NSMatchingFlags flags, BOOL *stop) 
{ 
    if([result.URL.absoluteString rangeOfString:@"mailto:"].location != NSNotFound) 
    { 
    NSLog(@"Match: %@", result); 
    } 
}]; 

मैट थॉम्पसन के NSHipster ब्लॉग NSDataDetector और उसके उपयोग पर एक excellent article है।

0

memmons 'पर answer निर्माण, निम्नलिखित कोड संभालने हम NSDataDetector

- (BOOL)isPlausibleEmailAddress 
{ 
    NSError *error = nil; 
    NSDataDetector *detector = 
    [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error]; 

    NSRange matchRange = [detector rangeOfFirstMatchInString:self options:kNilOptions range:NSMakeRange(0, [self length])]; 

    return matchRange.length == [self length]; 
} 
0

भरोसा कर सकते हैं कोई पूरा ईमेल स्ट्रिंग सत्यापित करना चाहिए आप यह कर सकते हैं आप स्ट्रिंग

के विस्तार
extension String { 
    var isEmail: Bool { 
     let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" 
     let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) 
     return emailTest.evaluate(with: self) 
    } 
} 

का उपयोग करके इसे

emailtext.isEmail { 

    print("email is valid")  
} else { 

print("email is not valid") 
}