当前位置: 代码迷 >> 综合 >> swfit 过滤手机号、座机号
  详细解决方案

swfit 过滤手机号、座机号

热度:57   发布时间:2024-01-26 05:25:46.0

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