swfit 过滤手机号、座机号

北城以北 提交于 2020-01-19 15:01:23

今天要实现物流信息里面电话可以点击拨打。然而服务端用的快递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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!