swfit 过滤手机号、座机号

今天要实现物流信息里面电话可以点击拨打。然而服务端用的快递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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值