iOS 检测文本中的URL、电话号码等信息
要检测文本中的URL、电话号码等,除了用正则表达式,还可以用NSDataDetector。
- 用NSTextCheckingResult.CheckingType初始化NSDataDetector
- 调用NSDataDetector的matches(in:options:range:)方法获得NSTextCheckingResult数组
- 遍历NSTextCheckingResult数组,根据类型获取相应的检测结果,通过range获取结果文本在原文本中的位置范围(NSRange)
下面的例子是把NSMutableAttributedString中的URL、电话号码突出显示。
funcshowAttributedStringLink(_attributedStr:NSMutableAttributedString){ //WecheckURLandphonenumber lettypes:UInt64=NSTextCheckingResult.CheckingType.link.rawValue|NSTextCheckingResult.CheckingType.phoneNumber.rawValue //GetNSDataDetector guardletdetector:NSDataDetector=try?NSDataDetector(types:types)else{return} //GetNSTextCheckingResultarray letmatches:[NSTextCheckingResult]=detector.matches(in:attributedStr.string,options:NSRegularExpression.MatchingOptions(rawValue:0),range:NSRange(location:0,length:attributedStr.length)) //Gothroughandcheckresult formatchinmatches{ ifmatch.resultType==.link,leturl=match.url{ //GetURL attributedStr.addAttributes([NSLinkAttributeName:url, NSForegroundColorAttributeName:UIColor.blue, NSUnderlineStyleAttributeName:NSUnderlineStyle.styleSingle.rawValue], range:match.range) }elseifmatch.resultType==.phoneNumber,letphoneNumber=match.phoneNumber{ //Getphonenumber attributedStr.addAttributes([NSLinkAttributeName:phoneNumber, NSForegroundColorAttributeName:UIColor.blue, NSUnderlineStyleAttributeName:NSUnderlineStyle.styleSingle.rawValue], range:match.range) } } }
用于初始化NSDataDetector的参数types的类型是NSTextCheckingTypes,实际上是UInt64。可以用或运算符连接多个值,以实现同时检测多种类型的文本。
publictypealiasNSTextCheckingTypes=UInt64
NSTextCheckingResult的检测结果属性与类型有关。例如,当检测类型是URL(resultType==.link),就可以通过url属性获取检测到的URL。
给NSMutableAttributedString添加下划线,NSUnderlineStyleAttributeName作为key对应的值在Swift中可以为Int,不能为NSUnderlineStyle。所以要写NSUnderlineStyle.styleSingle.rawValue。写NSUnderlineStyle.styleSingle会导致NSMutableAttributedString显示不出来。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!