iOS 检测文本中的URL、电话号码等信息
程序员文章站
2024-02-13 19:54:40
要检测文本中的 url、电话号码等,除了用正则表达式,还可以用 nsdatadetector。
用 nstextcheckingresult.checkingty...
要检测文本中的 url、电话号码等,除了用正则表达式,还可以用 nsdatadetector。
- 用 nstextcheckingresult.checkingtype 初始化 nsdatadetector
- 调用 nsdatadetector 的 matches(in:options:range:) 方法获得 nstextcheckingresult 数组
- 遍历 nstextcheckingresult 数组,根据类型获取相应的检测结果,通过 range 获取结果文本在原文本中的位置范围(nsrange)
下面的例子是把 nsmutableattributedstring 中的 url、电话号码突出显示。
func showattributedstringlink(_ attributedstr: nsmutableattributedstring) { // we check url and phone number let types: uint64 = nstextcheckingresult.checkingtype.link.rawvalue | nstextcheckingresult.checkingtype.phonenumber.rawvalue // get nsdatadetector guard let detector: nsdatadetector = try? nsdatadetector(types: types) else { return } // get nstextcheckingresult array let matches: [nstextcheckingresult] = detector.matches(in: attributedstr.string, options: nsregularexpression.matchingoptions(rawvalue: 0), range: nsrange(location: 0, length: attributedstr.length)) // go through and check result for match in matches { if match.resulttype == .link, let url = match.url { // get url attributedstr.addattributes([ nslinkattributename : url, nsforegroundcolorattributename : uicolor.blue, nsunderlinestyleattributename : nsunderlinestyle.stylesingle.rawvalue ], range: match.range) } else if match.resulttype == .phonenumber, let phonenumber = match.phonenumber { // get phone number attributedstr.addattributes([ nslinkattributename : phonenumber, nsforegroundcolorattributename : uicolor.blue, nsunderlinestyleattributename : nsunderlinestyle.stylesingle.rawvalue ], range: match.range) } } }
用于初始化 nsdatadetector 的参数 types 的类型是 nstextcheckingtypes,实际上是 uint64。可以用或运算符连接多个值,以实现同时检测多种类型的文本。
public typealias nstextcheckingtypes = uint64
nstextcheckingresult 的检测结果属性与类型有关。例如,当检测类型是 url (resulttype == .link),就可以通过 url 属性获取检测到的 url。
给 nsmutableattributedstring 添加下划线,nsunderlinestyleattributename 作为 key 对应的值在 swift 中可以为 int,不能为 nsunderlinestyle。所以要写nsunderlinestyle.stylesingle.rawvalue
。写nsunderlinestyle.stylesingle
会导致 nsmutableattributedstring 显示不出来。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
上一篇: Java中的final关键字详细介绍
下一篇: C#日期转换函数分享