iPhone开发判断邮箱格式是否合法

来源:互联网 发布:单片机hex文件 编辑:程序博客网 时间:2024/04/24 12:34

记录一下如何在iOS开发中判断邮箱格式的合法性,看了论坛里的favormm博客使用的方法,还有以下通过字符串操作来检查邮箱合法性(原址貌似打不开了):

-(BOOL)validateEmail:(NSString*)email

{

    if((0 != [email rangeOfString:@"@"].length) &&

         (0 != [email rangeOfString:@"."].length))

    {

          

           NSCharacterSet* tmpInvalidCharSet = [[NSCharacterSet alphanumericCharacterSetinvertedSet];

        NSMutableCharacterSet* tmpInvalidMutableCharSet = [[tmpInvalidCharSet mutableCopyautorelease];

        [tmpInvalidMutableCharSet removeCharactersInString:@"_-"];

       

           //使用compare option 来设定比较规则,如

           //NSCaseInsensitiveSearch是不区分大小写

           //NSLiteralSearch 进行完全比较,区分大小写

           //NSNumericSearch 只比较定符串的个数,而不比较字符串的字面值

        NSRange range1 = [email rangeOfString:@"@"

                                              options:NSCaseInsensitiveSearch];

       

        //取得用户名部分

        NSString* userNameString = [email substringToIndex:range1.location];

        NSArray* userNameArray   = [userNameString componentsSeparatedByString:@"."];

          

        for(NSString* string in userNameArray)

           {

            NSRange rangeOfInavlidChars = [string rangeOfCharacterFromSet: tmpInvalidMutableCharSet];

            if(rangeOfInavlidChars.length != 0 || [string isEqualToString:@""])

                return NO;

        }

       

        NSString *domainString = [email substringFromIndex:range1.location+1];

        NSArray *domainArray   = [domainString componentsSeparatedByString:@"."];

       

        for(NSString *string in domainArray)

           {

            NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:tmpInvalidMutableCharSet];

            if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])

                return NO;

        }

     

        return YES;

    }

    else // no ''@'' or ''.'' present

        return NO;

}


-(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;
}


最后使用了以下这段代码:

判断输入的String是否Email的正则表达

+ (BOOL)validateEmail:(NSString *)email 

{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:email];
}


PS:NSPredicate这里起筛选的作用,判断邮箱格式合法性



原创粉丝点击