iOS 正则表达式的使用方式
2017-01-03 本文已影响75人
Magician
在 iOS 开发中,有三种常用的正则表达式运用方式,为别为:NSPredicate、NSRegularExpression 和 字符串查找。三种方式各有优劣,可以通过不同需求选择不同的使用方式。
以邮箱校验为例:
1.NSPredicate(谓词)
谓词一般用于校验特定字符串的格式是否正确,使用方法很灵活。
- (BOOL)isEmailAddress:(NSString *)string
{
NSString *emailRegex = @"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailRegex];
return [pre evaluateWithObject:string];
}
2.NSRegularExpression
NSRegularExpression
是系统提供的用于正则校验的类,可以同时匹配多次,返回多个结果,例如过滤字符串中的特定格式。
- (NSArray *)matchEmailAddress:(NSString *)string
{
NSString *emailRegex = @"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:emailRegex options:NSRegularExpressionCaseInsensitive error:&error];
if (!error) {
NSArray *result = [regex matchesInString:aString options:0 range:NSMakeRange(0, [aString length])];
if (result.count > 0) {
NSMutableArray *emails = [NSMutableArray array];
for (NSTextCheckingResult *textCheckingResult in result) {
[emails addObject:[aString substringWithRange:textCheckingResult.range]];
}
return emails;
}
} else {
NSLog(@"Error: %@", error.localizedDescription);
}
return nil;
}
3.字符串查找
使用 NSString
的方法直接查找,其中 searchString
为正则表达式,mask
参数使用 NSRegularExpressionSearch
,返回第一个匹配结果的位置。
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask
- (BOOL)isEmailAddress:(NSString *)string
{
NSString *emailRegex = @"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSRange range = [string rangeOfString:emailRegex options:NSRegularExpressionSearch];
if (range.length != NSNotFound) {
return YES;
} else {
return NO;
}
}