当前位置:  开发笔记 > 编程语言 > 正文

验证iOS 2.0上的电子邮件地址的最佳做法是什么

如何解决《验证iOS2.0上的电子邮件地址的最佳做法是什么》经验,为你挑选了7个好方法。

验证用户在iOS 2.0上输入的电子邮件地址的最简洁方法是什么?

注意:这是一个特定于iOS 2.0的历史问题,由于其年龄和与其相关的其他问题,它不能退役,不能改为"现代"问题.



1> catlan..:

使用正则表达式验证电子邮件地址的答案非常详细地解释了RFC 5322中指定的语法对于原始正则表达式而言过于复杂.

我推荐像MKEmailAddress这样的真正的解析器方法.

作为快速正则表达式解决方案,请参阅DHValidation的此修改 :

- (BOOL) validateEmail: (NSString *) candidate {
    NSString *emailRegex =
@"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}"
@"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"
@"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-"
@"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5"
@"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"
@"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
@"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", emailRegex]; 

    return [emailTest evaluateWithObject:candidate];
}


http://cocoawithlove.com/2009/06/verifying-that-string-is-email-address.html上有一个更完整的正则表达式,可用来代替这个简单的正则表达式.
这是一个非常天真但自由的电子邮件正则表达式作为Cocoa字符串:`@"[^ @] + @ [^.@] +(\\.[^.@] +)+"`如果您需要验证电子邮件地址向其发送消息并查看是否成功.您永远不会仅使用正则表达式以任何精确度来验证它,因此最好不要因为不必要的严格正则表达式而误导用户并丢失注册.
很棒,但不适用于OS <3.0,因为NSPredicate不可用.
这是一个非常糟糕的正则表达式.例如,对于使用.museum顶级域名的人来说,它会失败.请参阅此文章:http://www.linuxjournal.com/article/9585
尼斯.每个人都忘记了NSPredicate可以运行regexp.
第二个正则表达式中的大写字符怎么样?
如果它不是方法声明中的所有空格,我会给它+1:p.

2> Trey..:

阅读RFC.几乎每个认为他们知道如何解析/清理/验证电子邮件地址的人都是错误的.

http://tools.ietf.org/html/rfc2822 第3.4.1节非常有用.注意

dtext           =       NO-WS-CTL /     ; Non white space controls

                        %d33-90 /       ; The rest of the US-ASCII
                        %d94-126        ;  characters not including "[",
                                        ;  "]", or "\"

是的,这意味着+,'等都是合法的.



3> Marcus S. Za..:

到目前为止我找到的最好的解决方案(以及我最终得到的解决方案)是将RegexKitLite添加到项目中,该项目通过NSString Categories提供对正则表达式的访问.

添加到项目中非常轻松,一旦到位,任何正则表达式电子邮件验证逻辑都将起作用.


这个问题,从2009年4月开始,是在iOS上存在NSPredicate之前.
@Marcus,Stack Overflow的重点不是保留过去特定问题如何解决的历史记录.也就是说,我编辑了你的问题以强调2.0兼容性角度.
同样,当问到这个问题时,在iOS 2.0中NSRegularExpression***DID NOT EXIST***.
NSPredicate可以在不向项目添加其他库的情况下执行RegEx.
请阅读标题,这是针对iOS 2.0的Catlan解决方案不存在的.

4> Brandon Yarb..:

一个好的开始是决定你和你不想接受什么作为电子邮件地址?

99%的电子邮件地址如下所示:bob.smith@foo.com或fred@bla.edu

但是,拥有这样的电子邮件地址在技术上是合法的:f !#$%&'*+-/=?^_{|}〜"ha!"@ com

对于顶级域名,世界上可能只有少数有效的电子邮件,并且几乎没有人使用其他大多数字符(特别是引号和反引号),因此您可能希望假设这些都是无效的事情.但你应该做出有意识的决定.

除此之外,做Paul所说的并尝试将输入与正则表达式匹配如下:^ [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] +.[AZ] { 2,} $

那个人几乎会匹配每个人的电子邮件地址.



5> Srikar Doddi..:

虽然对正则表达式的关注很好,但这只是第一个必要的步骤.还有其他步骤也需要考虑一个好的验证策略.

我头顶的两件事是:

    DNS验证以确保域实际存在.

    在DNS验证之后,您还可以选择执行smtp验证.向smtp服务器发送呼叫以查看用户是否确实存在.

通过这种方式,您可以捕获各种用户错误并确保它是有效的电子邮件.



6> Geek..:

此功能很简单,但更彻底地检查电子邮件地址.例如,根据RFC2822,电子邮件地址不得包含连续的两个句点,例如firstname..lastname @ domain..com

在正则表达式中使用锚也很重要,如此函数中所示.没有锚点,以下电子邮件地址被认为是有效的:第一个;名称)lastname@domain.com(因为lastname@domain.com部分有效,首先忽略;名称)在开头和(等等).锚点强制正则表达式引擎来验证整个电子邮件.

此功能使用NSPredicate,这在iOS 2中不存在.不幸的是,它可能无法帮助提问者,但希望能帮助其他人使用更新版本的iOS.此函数中的正则表达式仍可应用于iOS 2中的RegExKitLite.对于使用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中的正则表达式验证电子邮件地址.


但是这个问题的用途是什么以及ios 2的用途是什么?我们有最新的操作系统,即ios 7.1.你也可以使用ios 6.

7> 小智..:
NSString *emailString = textField.text; **// storing the entered email in a string.** 
**// Regular expression to checl the email format.** 
NSString *emailReg = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailReg]; 
if (([emailTest evaluateWithObject:emailString] != YES) || [emailStringisEqualToString:@""]) 
{ 
UIAlertView *loginalert = [[UIAlertView alloc] initWithTitle:@" Enter Email in" message:@"abc@example.com format" delegate:self 
cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

enter code here

[loginalert show]; 
[loginalert release]; 
} 
If email is invalid, it will remind the user with an alert box. 
Hope this might be helpful for you all. 

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有