在 iOS 開發(fā)中腐宋,有三種常用的正則表達式運用方式任洞,為別為:NSPredicate伦泥、NSRegularExpression 和 字符串查找线欲。三種方式各有優(yōu)劣搞动,可以通過不同需求選擇不同的使用方式。
以郵箱校驗為例:
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
是系統(tǒng)提供的用于正則校驗的類谦趣,可以同時匹配多次,返回多個結(jié)果座每,例如過濾字符串中的特定格式前鹅。
- (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
參數(shù)使用 NSRegularExpressionSearch
舰绘,返回第一個匹配結(jié)果的位置。
- (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;
}
}