我正在开发一个 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]; }
关于 Lax 与 Strict 的讨论 - 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 */ }