M80AttributedLabelURL.m 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // M80AttributedLabelURL.m
  3. // M80AttributedLabel
  4. //
  5. // Created by amao on 13-8-31.
  6. // Copyright (c) 2013年 www.xiangwangfeng.com. All rights reserved.
  7. //
  8. #import "M80AttributedLabelURL.h"
  9. static NSString *M80URLExpression = @"((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)((:[0-9]+)?)((?:\\/[\\+~%\\/\\.\\w\\-]*)?\\??(?:[\\-\\+=&;%@\\.\\w]*)#?(?:[\\.\\!\\/\\\\\\w]*))?)";
  10. static M80CustomDetectLinkBlock customDetectBlock = nil;
  11. static NSString *M80URLExpressionKey = @"M80URLExpressionKey";
  12. @implementation M80AttributedLabelURL
  13. + (M80AttributedLabelURL *)urlWithLinkData:(id)linkData
  14. range:(NSRange)range
  15. color:(UIColor *)color
  16. {
  17. M80AttributedLabelURL *url = [[M80AttributedLabelURL alloc]init];
  18. url.linkData = linkData;
  19. url.range = range;
  20. url.color = color;
  21. return url;
  22. }
  23. + (NSArray *)detectLinks:(NSString *)plainText
  24. {
  25. if (customDetectBlock)
  26. {
  27. return customDetectBlock(plainText);
  28. }
  29. else
  30. {
  31. NSMutableArray *links = nil;
  32. if ([plainText length])
  33. {
  34. links = [NSMutableArray array];
  35. NSRegularExpression *urlRegex = [M80AttributedLabelURL urlExpression];
  36. [urlRegex enumerateMatchesInString:plainText
  37. options:0
  38. range:NSMakeRange(0, [plainText length])
  39. usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
  40. NSRange range = result.range;
  41. NSString *text = [plainText substringWithRange:range];
  42. NSArray* tempArray = [[LCSaveData getTAppUrl] componentsSeparatedByString:@","];
  43. for (NSString* str in tempArray) {
  44. if([text rangeOfString:str].location !=NSNotFound) {
  45. M80AttributedLabelURL *link = [M80AttributedLabelURL urlWithLinkData:text range:range color:nil];
  46. [links addObject:link];
  47. }
  48. }
  49. }];
  50. }
  51. return links;
  52. }
  53. }
  54. + (NSRegularExpression *)urlExpression
  55. {
  56. NSMutableDictionary *dict = [[NSThread currentThread] threadDictionary];
  57. NSRegularExpression *exp = dict[M80URLExpressionKey];
  58. if (exp == nil)
  59. {
  60. exp = [NSRegularExpression regularExpressionWithPattern:M80URLExpression
  61. options:NSRegularExpressionCaseInsensitive
  62. error:nil];
  63. dict[M80URLExpressionKey] = exp;
  64. }
  65. return exp;
  66. }
  67. + (void)setCustomDetectMethod:(M80CustomDetectLinkBlock)block
  68. {
  69. customDetectBlock = [block copy];
  70. }
  71. @end