Эта функция проста, но проверяет адрес электронной почты более тщательно. Например, в соответствии с RFC2822 адрес электронной почты не должен содержать два периода подряд, например, namenamelastlast @ domain..com
Также важно использовать якоря в регулярных выражениях, как показано в этой функции. Без привязок следующий адрес электронной почты считается действительным: first; name) lastname@domain.com (blah , поскольку раздел lastname@domain.com действителен, сначала игнорируется ; имя) в начале и (бла в конце. Якоря заставляют механизм регулярных выражений проверять всю электронную почту.
Эта функция использует NSPredicate, который не существует в iOS 2. К сожалению, он может не помочь спрашивающему, но, надеюсь, поможет другим с более новыми версиями iOS. Регулярные выражения в этой функции все еще могут быть применены к RegExKitLite в iOS 2, хотя. А для тех, кто использует iOS 4 или более позднюю версию, эти регулярные выражения могут быть реализованы с помощью NSRegularExpression.
- (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];
}
См. подтверждение адреса электронной почты с использованием регулярного выражения в Objective-C .