Possible Duplicate:
Best practices for validating email address in Objective-C on iOS 2.0?

我正在开发一个iPhone应用程序,我需要用户在登录时给出他的邮箱地址.

判断邮箱地址是否有效的最佳方法是什么?

推荐答案

良好的可可功能:

-(BOOL) NSStringIsValidEmail:(NSString *)checkString
{
   BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
   NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$";
   NSString *laxString = @"^.+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$";
   NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
   NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
   return [emailTest evaluateWithObject:checkString];
}

关于宽松与严格的讨论-http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/

由于类别更好,您还可以添加一个界面:

@interface NSString (emailValidation) 
  - (BOOL)isValidEmail;
@end

使生效

@implementation NSString (emailValidation)
-(BOOL)isValidEmail
{
  BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
  NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$";
  NSString *laxString = @"^.+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$";
  NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
  NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
  return [emailTest evaluateWithObject:self];
}
@end

然后利用:

if([@"emailString@email.com" isValidEmail]) { /* True */ }
if([@"InvalidEmail@notreallyemailbecausenosuffix" isValidEmail]) { /* False */ }

Objective-c相关问答推荐

NSString "nil or empty" 判断 - 这完成了吗?

UITabBar 中的自定义 colored颜色

Objective-C:在字符串中查找数字

在 ARC 之后,我应该为调度队列使用什么属性?

如何在 iOS Objective-C 头文件中将函数标记为已弃用?

如何使用 Cocoa 创建临时文件?

我可以以编程方式滚动到 UIPickerView 中所需的行吗?

使用 NSMutableArray 的二维数组

如何判断特定的 ViewController 视图当前是否可见?

为什么 NSOrderedSet 不继承自 NSSet?

首次提交应用内购买以供审核

如何制作真正的私有实例变量?

如何在 UIAlertController 中添加 textField?

在我滚动之前,数据不会加载到 UITableView 中

可变集合有文字语法吗?

iPhone如何在打字时获取UITextField的文本?

如何判断 NSString 的最后一个字符

使用 Objective-C 发布多部分/表单数据

如何在 iPhone SDK 中包含和使用新字体?

找出窗口中的 UIBarButtonItem 框架?