今天要实现物流信息里面电话可以点击拨打。然而服务端用的快递100三方返回的内容,只有物流信息和时间,作为前端,我们改怎么知道一条物流信息里面有几个手机号,几个座机号。我是没辙了。用富文本实现可以点击拨打电话很简单,但是怎么样鞥呢过滤出来手机号和座机号呢,当然用正则过滤喽
奉上代码
//手机号
fileprivate let regexMobilePhoneStr = "\\d{11}"
//固话
fileprivate let regexPhoneStr = "\\d{3,4}[- ]?\\d{7,8}"
//用个for循环,写死3次,应该一条物流信息里面不会超过3个电话吧
//为什么这么写,我也没办法,谁让服务端不告诉我有几个手机号,或者把手机号单独返回给我们拼接更方便
for _ in 0...2 {
var number = (contentLabelText as NSString).getStrWithRegex(regexMobilePhoneStr)
if number.count == 0 {
number = (contentLabelText as NSString).getStrWithRegex(regexPhoneStr)
}
let range = (contentLabelText as NSString).range(of: number)
//下面这个是用一个项目中现有的三方TTTAttributedLabel,所以我就没用再自己手动写了,用了三方
self.contentLabel.addLink(toPhoneNumber: number, with: range)
}
//上面getStrWithRegex正则过滤方法是NSString分类里面的,小伙伴也可以自己更具需要携程swift模式哦。因为我的项目时oc和swift混编,里面有了OC的分类可以使用,这里也粘贴下oc的方法
- (NSString *)getStrWithRegex:(NSString *)regexStr {
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&error];
if (regex != nil) {
NSArray* matches = [regex matchesInString:self options:NSMatchingReportCompletion range:NSMakeRange(0, [self length])];
for (NSTextCheckingResult *match in [matches reverseObjectEnumerator]) {
NSRange matchRange = [match range];
NSString *subStr = [self substringWithRange:matchRange];
if (subStr) {
return subStr;
}
}
}
return nil;
}
来源:CSDN
作者:ZHFDBK
链接:https://blog.csdn.net/ZHFDBK/article/details/104040362