可能的重复项︰
验证电子邮件地址在 OBJECTIVE-C 中的在 iOS 2.0 的最佳做法?

我正在开发一个 iPhone 应用程序需要用户登录时提供他的电子邮件地址的地方。

检查电子邮件地址是有效的电子邮件地址的最好办法是什么?

2010-06-29 10:01:49
问题评论:

有效的电子邮件,因为它是 user@mac.com 或有效,因为它是真实的电子邮件的存在,并将接受邮件吗?

我想要两个,如果 abc@xyz.com 有效,或者 wheather 用户提供无效的 id (例如 abc.com) 我还要检查 abc@xyz.com 会接受邮件的实际电子邮件。

没有方法来检查第二个条件。若要检查字符串是否是有效的电子邮件,只需扫描它以查看是否 ' @' 和。有吗

@BradLarson 没有...

回答:

良好的 cocoa 函数︰

-(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 */ }

很好的函数 !好工作 !

我使用NSString *stricterFilterString = @"^[_A-Za-z0-9-+]+(.[_A-Za-z0-9-+]+)*@[A-Za-z0-9-]+(.[A-Za-z0-9-]+)*(.[A-Za-z‌​]{2,4})$";

感谢 @WarifAkhandRishi-我已经更新来处理负面测试用例中的字符串。

或在 swift;)func isValidEmail(checkString:NSString, strictFilter strict:Bool)->Bool{ var stricterFilterString = "[A-Z0-9a-z._%+-]+@([A-Za-z0-9-]+.)+[A-Za-z]{2,4}"; var laxString = ".+@([A-Za-z0-9]+.)+[A-Za-z]{2}[A-Za-z]*"; var emailRegex = strict ? stricterFilterString : laxString; var emailTest:NSPredicate = NSPredicate(format:"SELF MATCHES %@", emailRegex); return emailTest.evaluateWithObject(checkString); }

新 Tld 像.museum,.travel 将通过严格的测试。

要检查一个字符串变量是否包含有效的电子邮件地址,最简单的方法是对照正则表达式对其进行测试。没有好的各种正则表达式的讨论和在常规 expressions.info及其利弊权衡.

这里是一个倾一侧允许通过某些无效地址的相对简单︰ ^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{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在您的项目,您可以访问 C 级正则表达式包含在 iOS 2.0 的 Api。

这是一个优秀与为我工作的 NSRegularExpression。

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

您可以插入所需的任何正则表达式,但我希望能够在一条线。

这是在 Swift,甚至更好的选择,因为rangeOfString()返回可选的如果没有匹配项,这是nil

若要验证电子邮件字符串将需要编写正则表达式来检查它正确的窗体中。有很多出在网站上,但一些可以排除什么是真正合法的地址是 carefull。

实质上它看起来像这样

^((?>[a-zA-Zd!#$%&'*+-/=?^_`{|}~]+x20*|"((?=[x01-x7f])[^"]|[x01-x7f])*"x20*)*(?<angle><))?((?!.)(?>.?[a-zA-Zd!#$%&'*+-/=?^_`{|}~]+)+|"((?=[x01-x7f])[^"]|[x01-x7f])*")@(((?!-)[a-zA-Zd-]+(?<!-).)+[a-zA-Z]{2,}|[(((?(?<![).)(25[0-5]|2[0-4]d|[01]?d?d)){4}|[a-zA-Zd-]*[a-zA-Zd]:((?=[x01-x7f])[^[]]|[x01-x7f])+)])(?(angle)>)$

发送一封电子邮件并查看结果的,将意味着实际检查电子邮件存在,以及不会反弹。亦即它退回或者它没有。但是它可能不弹几个小时或者根本不是,仍然不是一个"真正的"电子邮件地址。有许多服务有其自称为您执行此操作可能会支付您的和非常坦白地说为什么要那么麻烦来查看是否真实?

最好要检查用户有没有拼写错误写电子邮件其他它们可能输入错误、 不意识到它的安排,然后与您用于未回复的黑。但是如果有人想要添加只顾电子邮件的地址有什么可以阻止他们创建 hotmail 或 yahoo (或许多其他位置) 上获得的同一端。

所以执行正则表达式和验证结构但忘记验证服务。

这就是一个灾难,正则表达式。若要使用它,您将需要目标 iOS 4.0 的 NSRegularExpression 类,或使用一种多为早期版本的 iOS 编译的正则表达式静态库。

实际上,您可以使用 NSPredicate,可以处理正则表达式。

请输入您的翻译

Check that an email address is valid on iOS [duplicate]

确认取消