在iOS应用程序中,如何在UITextField上添加邮箱验证?

推荐答案

使用NSPredicate和Regex:

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

对于用逗号分隔的一组邮箱:

- (NSMutableArray*)validateEmailWithString:(NSString*)emails
{
    NSMutableArray *validEmails = [[NSMutableArray alloc] init];
    NSArray *emailArray = [emails componentsSeparatedByString:@","];
    for (NSString *email in emailArray)
    {
        NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
        NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
        if ([emailTest evaluateWithObject:email])
            [validEmails addObject:email];
    }
    return [validEmails autorelease];
}

编辑答案:(它还验证额外的点)

- (BOOL)validateEmailWithString:(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];
}

Objective-c相关问答推荐

我在哪里可以找到 info.plist 文件?

NSArray 添加元素

让 iPhone sleeping

验证应用内购买的收据

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

如何在目标 C 中创建单例类

iOS 正确使用 @weakify(self) 和 @strongify(self)

改变 setContentOffset:animated: 的速度?

Container View 好像有 UINavigationBar 一样被下推?

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

在 ios8 中没有调用 didRegisterForRemoteNotificationsWithDeviceToken,但是 didRegister...Settings 是

在Objective-C中替换字符串中的一个字符

Electron邮件镇静 iOS 8

'supportedInterfaceOrientations' 实现中的返回类型冲突: - 警告

ios 11 UITabBar UITabBarItem 定位问题

如何在 NSSet 或 NSArray 中搜索具有特定属性的特定值的对象?

IOHIDFamily 的神秘控制台错误

何时在 iPhone 上使用 UIView 与 UIViewController?

在 iOS 7 上运行应用程序时显示黑条(4 英寸视网膜显示屏)

判断 UIViewController 是否即将从导航堆栈中弹出?