到网上搜到一个关于邮箱验证的代码,下来一试,结果发现算法有很大的漏洞(ddd.ddd@com)会通过验证,我特此写一个比较好的验证:
如下:
-(BOOL)validateEmail:(NSString*)email
{
//检查email里是否有'@'和'.' ag:jddj@qq.com
if( (0 != [email rangeOfString:@"@"].length) && (0 != [email rangeOfString:@"."].length) )
{
NSMutableCharacterSet *invalidCharSet = [[[[NSCharacterSet alphanumericCharacterSet]invertedSet]mutableCopy]autorelease];
[invalidCharSet removeCharactersInString:@"_-"];
NSRange range1 = [email rangeOfString:@"@" options:NSCaseInsensitiveSearch];
//根据@把字符分割成两个子串jddj和.com
NSString *usernamePart = [email substringToIndex:range1.location];
//检查前半部分是否有'.'
if ((0 == [usernamePart rangeOfString:@"."].length))
{
//取出后半部分字符串
NSString *domainPart = [email substringFromIndex:range1.location+1];
NSArray *stringsArray2 = [domainPart componentsSeparatedByString:@"."];
for (NSString *string in stringsArray2)
{
NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:invalidCharSet];
//检查‘@’和‘.’是否相邻
if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
return NO;
}
return YES;
}
else {
return NO;
}
}
else
return NO;
}
以前的代码:
转自 http://iphoneapp-dev.blogspot.com/search/label/Email%20Validation%20in%20iPhone%20application.。代码如下
-(BOOL)validateEmail:(NSString*)email{
if( (0 != [email rangeOfString:@"@"].length) && (0 != [email rangeOfString:@"."].length) )
{
NSMutableCharacterSet *invalidCharSet = [[[[NSCharacterSet alphanumericCharacterSet] invertedSet]mutableCopy]autorelease];
[invalidCharSet removeCharactersInString:@"_-"];
NSRange range1 = [email rangeOfString:@"@" options:NSCaseInsensitiveSearch];
// If username part contains any character other than "." "_" "-"
NSString *usernamePart = [email substringToIndex:range1.location];
NSArray *stringsArray1 = [usernamePart componentsSeparatedByString:@"."];
for (NSString *string in stringsArray1) {
NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet: invalidCharSet];
if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
return NO;
}
NSString *domainPart = [email substringFromIndex:range1.location+1];
NSArray *stringsArray2 = [domainPart componentsSeparatedByString:@"."];
for (NSString *string in stringsArray2) {
NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:invalidCharSet];
if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
return NO;
}
return YES;
}
else // no ''@'' or ''.'' present
return NO;
}