在网上能找到的ios匹配正则表达式的文章基本使用的都是使用NSPredicate 的SELF MATCHES,包括我在项目中也是如此,如下:
//邮箱有效性验证验证
-(BOOL)isValidateEmail
{
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"];
return [emailTest evaluateWithObject:self];
}
在这段时间突然发现出bug了,它不能正确识别全角半角符,比如下面几个邮箱:
1- abcde@126.com
2- abcde@126.com
3- abcde@126.com
细心的朋友可能会发现,邮箱2中的@符是全角,邮箱3中的.是全角,只有邮箱1是正确的。而在上面那个验证邮箱的方法中,3个邮箱都能验证通过。这是因为这个方法中并不区分全角和半角。
因此我们不能使用这个方法验证邮箱,需要替换成:
//邮箱有效性验证验证
-(BOOL)isValidateEmail {
NSString *emailRegex = kRegexEmail;
if ([self rangeOfString:emailRegex options:NSRegularExpressionSearch].location != NSNotFound) {
return YES;
} else {
return NO;
}
}