2011-12-15 47 views
4

使用RegexKitLite庫(iOS2.0),NSPredicate(iOS 3.0以上)和NSRegularExpression(iOS 4.0)可以完成iPhone編程中的電子郵件驗證檢查。但是,有沒有人能說出一個優於另一個的優點,哪一個是上述三個方法中最好的驗證選擇。iOS中的電子郵件驗證

+0

僅供參考,它是一個在Android上非常簡單的東西的例子,它的內置.. if(!android.util.Patterns.EMAIL_ADDRESS.matcher(someString).matches()) – Fattie

回答

1

我認爲這在很大程度上取決於在iOS上的最低版本的應用程序將支持,以及是否有一個內置的類」我會做這份工作,使用它。正如你暗示的那樣,你會用一些其他的第三方框架以一致的方式來支持舊版本。

現在,我會使用NSPredicateNSRegularExpression,無論是從iOS 4的開始,這是相當有可能成爲新的iOS應用程序所支持的最低版本,如果不是的iOS 5

有用post支持。

+0

感謝您提供僅針對問題的解決方案。現在我正在iOS 5.0上工作,NSPredicate正在正常工作。 – user574089

12

我使用NSPredicate總是......這是工作的罰款

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

-1這是waaaay太寬容,因爲它會匹配「'......... @ ........ dave'」 –

+0

如何限制用戶輸入他的電子郵件ID作爲@ gmail.com文本域。 – venki

8

我的回答是從the excellent solution provided in this link一個重構的..

///Returns YES (true) if EMail is valid 
+(BOOL) IsValidEmail:(NSString *)emailString Strict:(BOOL)strictFilter 
{ 
    NSString *stricterFilterString = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
    NSString *laxString = @"[email protected]+\\.[A-Za-z]{2}[A-Za-z]*"; 

    NSString *emailRegex = strictFilter ? stricterFilterString : laxString; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 

    return [emailTest evaluateWithObject:emailString]; 
} 
3
- (BOOL)validateEmail:(NSString *)emailStr 
{ 
    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:emailStr]; 
} 

On Button Click : 

if (![self validateEmail:[txtEmail text]]) 
    { 
     alertValidator.message = @"Please Enter Valid Email Address !"; 
     [alertValidator show]; 
     txtEmail.text = @""; 
     [txtEmail becomeFirstResponder]; 
    } 
+0

這將返回true:'.... @ .. d..dd' –

2

我認爲最好的辦法,倒手,是Mailgun's free email validation API。我寫了一個簡單的目標-C包裝它:

https://github.com/benzguo/BZGMailgunEmailValidation

BZGMailgunEmailValidator *validator = 
    [BZGMailgunEmailValidator validatorWithPublicKey:YOUR_PUBLIC_KEY]; 

[validator validateEmailAddress:self.emailFieldCell.textField.text 
         success:^(BOOL isValid, NSString *didYouMean) { 
         // Validation succeeded 
         } failure:^(NSError *error) { 
         // Validation failed 
         }]; 

如果有一個連接錯誤,驗證回落到基於正則表達式驗證。

如果你仍然想驗證使用正則表達式的郵件,請上網:

http://www.regular-expressions.info/email.html

https://wiki.mozilla.org/TLD_List

0

完整的電子郵件驗證。試試這個

- (BOOL)validateEmailWithString:(NSString*)checkString 
{ 

    NSString *laxString = @"[email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", laxString]; 
    return [emailTest evaluateWithObject:checkString]; 
} 
-1

如何在IOS電子郵件ID和密碼驗證

快點,便於電子郵件ID檢查的簡單的驗證代碼後非常有用。

- (IBAction)actLogin:(id)sender 

{ 

    if([self validateEmailWithString:userNameText.text]==YES) 
    { 
     NSLog(@"valid email"); 
     if (passWordText.text.length>6) 
     { 
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      [defaults setObject:userNameText.text forKey:@"username"]; 
      [defaults setObject:passWordText.text forKey:@"password"]; 
      [defaults setObject:@"YES" forKey:@"islogin"]; 
      [defaults synchronize]; 
      NSLog(@"Login is Successfully !!"); 
     } 
    } 
    else 
    { 
     NSLog(@"invalid email and password"); 
    } 
} 

所以,我希望對你有所幫助。 謝謝...