检查一个电子邮件地址在iOS上是否有效

可能重复:
在iOS 2.0上验证Objective-C中的电子邮件地址的最佳实践?

我正在开发一个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 */ }

要检查字符串变量是否包含有效的电子邮件地址,最简单的方法是使用正则表达式对其进行测试。 在regular-expressions.info上有各种正则表达式及其权衡的讨论。

这是一个相对简单的方法,它允许通过以下方式允许一些无效地址: ^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[AZ]{2,6}$

如何使用正则表达式取决于您使用的iOS版本。

iOS 4.x及更高版本

您可以使用NSRegularExpression ,它允许您直接编译和测试正则表达式。

iOS 3.x

不包括NSRegularExpression类,但包含NSPredicate ,它可以匹配正则表达式。

NSString *emailRegex = ...;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
BOOL isValid = [emailTest evaluateWithObject:checkString];

在cocoawithlove.com上阅读关于这种方法的完整文章。

iOS 2.x

不包括Cocoa库中的任何正则表达式匹配。 但是,您可以在项目中轻松包含RegexKit Lite,从而使您可以访问iOS 2.0中包含的C级正则表达式API。


下面是一个很好的NSRegularExpression,它适用于我。

[text rangeOfString:@"^.+@.+..{2,}$" options:NSRegularExpressionSearch].location != NSNotFound;

你可以插入你想要的任何正则表达式,但我喜欢能够在一行中完成。

链接地址: http://www.djcxy.com/p/7287.html

上一篇: Check that an email address is valid on iOS

下一篇: Email validation using jQuery