这里有几个关于如何使用正则表达式和/或 JavaScript 等验证电子邮件地址的查询。我还阅读了一个 Cocoa 类,NSScanner
它应该进行解析。用法有点奇怪,但我确实读过一个页面,让程序员使用 .csv 文件检查 CSV 文件NSScanner
。
可以NSScanner
处理电子邮件地址的语法吗?
(如果可能,为了更有用,代码不仅可以验证,还可以提供一种提取方式:本地部分、域、可读用户名(如果有)和任何注释)
不如改用更现代的NSRegularExpression
(OS X v10.7+、iOS 4.0+):
- (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);
}
另请查看这篇 CocoaWithLove博客文章(2009 年,但仍然大部分有效)以获得更详细的讨论。