1,使用系统的方法
- (BOOL)match:(NSString *)pattern { // 1.创建正则表达式 NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; // 2.测试字符串 NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)]; return results.count > 0; } - (BOOL)isQQ { // 1.不能以0开头 // 2.全部是数字 // 3.5-11位 return [self match:@"^[1-9]\\d{4,10}$"]; } - (BOOL)isPhoneNumber { // 1.全部是数字 // 2.11位 // 3.以13\15\18\17开头 return [self match:@"^1[3578]\\d{9}$"]; // JavaScript的正则表达式:\^1[3578]\\d{9}$\ } - (BOOL)isIPAddress { // 1-3个数字: 0-255 // 1-3个数字.1-3个数字.1-3个数字.1-3个数字 return [self match:@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"]; }
2.使用第三方开源库
RegexKitLite.h
1.设置非 ARC模式
-fno-objc-arc
2.添加依赖的库
libicucore.dylib
3.使用规则
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] init]; // 表情的规则 NSString *emotionPattern = @"\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]"; // @的规则 NSString *atPattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5-_]+"; // #话题#的规则 NSString *topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#"; // url链接的规则 NSString *urlPattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))"; NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern]; // 遍历所有的特殊字符串 NSMutableArray *parts = [NSMutableArray array]; [text enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) { if ((*capturedRanges).length == 0) return; HWTextPart *part = [[HWTextPart alloc] init]; part.special = YES; part.text = *capturedStrings; part.emotion = [part.text hasPrefix:@"["] && [part.text hasSuffix:@"]"]; part.range = *capturedRanges; [parts addObject:part]; }]; // 遍历所有的非特殊字符 [text enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) { if ((*capturedRanges).length == 0) return; HWTextPart *part = [[HWTextPart alloc] init]; part.text = *capturedStrings; part.range = *capturedRanges; [parts addObject:part]; }];
浙公网安备 33010602011771号