先立个flag,在检测网址链接的过程中,不管是使用 NSDataDetector还是TTTAttributedLabel 做检索网址,其实TTTAttributedLabel也是使用系统的检索网址,先记录一下发现的问题。
如果网址是这样的
http://www.jianshu.com下雨天的
检索的结果是不准确的 ,结果检索到的网址是http://www.jianshu.com下雨天的
如果网址是这样的
http://www.jianshu.com/下雨天的
检索结果是一样的,不准确如果网址是这样的去掉了协议头,并且网址和文字中间没有空格,
www.jianshu.com下雨天的
结果检索到的网址是www.jianshu.com
正确
- 如果网址和文字中间#有#空格,有没有协议头都一样
http://www.jianshu.com 下雨天的
结果检索到的网址是http://www.jianshu.com
正确
发现好多第三方,都是采用系统自带的检测网址或者电话号码, 电话号码还好点但是网址总是检测不准。
正确的姿势应该是这样的:
检测网址与电话:
// url链接的规则 NSString *urlPattern = @"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(((http[s]{0,1}|ftp)://|)((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)"; NSString *phoneNumber =@"\\d{3}-\\d{8}|\\d{4}-\\d{7}|\\d{11}" ;
下一篇分析下如何利用正则检索网址与电话号码,表情,并且实现富文本的多行与完成显示的切换。