Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 是否使用NSScanner验证和提取电子邮件地址?_Cocoa_Email_Nsscanner - Fatal编程技术网

Cocoa 是否使用NSScanner验证和提取电子邮件地址?

Cocoa 是否使用NSScanner验证和提取电子邮件地址?,cocoa,email,nsscanner,Cocoa,Email,Nsscanner,这里有几个关于如何使用正则表达式和/或JavaScript等验证电子邮件地址的查询。我还了解了一个Cocoa类,NSScanner,它应该进行解析。这种用法有点奇怪,但我确实读过一个页面,上面有程序员用NSScanner NSScanner能否处理电子邮件地址语法 (如果可能,为了更有用,代码不仅可以验证,还可以提供一种提取:本地部分、域、可读用户名(如果有)和任何注释的方法)不如改用更现代的NSRegularExpression(OS X v10.7+,iOS 4.0+): 还要查看博客文章(

这里有几个关于如何使用正则表达式和/或JavaScript等验证电子邮件地址的查询。我还了解了一个Cocoa类,
NSScanner
,它应该进行解析。这种用法有点奇怪,但我确实读过一个页面,上面有程序员用
NSScanner

NSScanner
能否处理电子邮件地址语法


(如果可能,为了更有用,代码不仅可以验证,还可以提供一种提取:本地部分、域、可读用户名(如果有)和任何注释的方法)

不如改用更现代的
NSRegularExpression
(OS X v10.7+,iOS 4.0+):


还要查看博客文章(2009年,但大部分仍然有效)以获得更详细的讨论。

这是讨论过的同一个站点。询问非正则表达式方法的要点是,我在众多“电子邮件地址的最佳正则表达式”中读到,正则表达式与电子邮件语法不兼容,因为注释可以嵌套(而正则表达式无法处理)。但是缺少注释兼容性似乎并没有困扰大多数开发人员。代码根据RFC2822-Internet消息格式解析任何有效的电子邮件地址。
- (BOOL) isValidEmail:(NSString*) emailString
{
   // valid email address according to RFC 2822
   // Check http://www.cocoawithlove.com/2009/06/verifying-that-string-is-email-address.html
   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])+)\\])";

   NSError *error = nil;
   NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:emailRegEx
                                                                          options:NSRegularExpressionCaseInsensitive
                                                                            error:&error];
   if (error != nil)
      return NO;

   NSRange stringRange = NSMakeRange(0, emailString.length);
   NSRange matchRange = [regex rangeOfFirstMatchInString:emailString options:0 range:stringRange];

   return NSEqualRanges(matchRange, stringRange);
}