string中识别手机号

昨天在开发查看物流的过程中,遇到这么一个场景: 当某一条物流信息的字符串中包含电话号码,然后显示的时候将电话号码用不同的颜色显示,并且点单这个号码时提示是否拨号;
当时百度了一下,有用的资料不好找, 找了很多关键字才碰上TTTAttributedLabel这个类;
下面,我来简单的使用这个类来完成这个场景;

1.首先, 需要到gitHub上下载这个类包 , 其中一个.h和.m
2.在需要label的地方,将TTTAttributedLabel替换原来的UILabel; 这是初始化TTTAttributedLabel; TTTAttributedLabel是继承UILabel的,所以UILabel的属性TTTAttributedLabel是都能使用的;

// 初始化
TTTAttributedLabel *label = [[TTTAttributedLabel alloc] initWithFrame:CGRectMake(10, 120, self.view.frame.size.width-20, 60)];
//设置背景色
    label.backgroundColor = [UIColor grayColor];
    //字体
    label.font = [UIFont systemFontOfSize:14];
    //普通字体颜色
    label.textColor = [UIColor blackColor];
    //允许折行显示
    label.lineBreakMode = NSLineBreakByCharWrapping;
    //可以显示无限行
    label.numberOfLines = 0;
    //设置高亮颜色
    label.highlightedTextColor = [UIColor greenColor];
    //**重点:检测 是不是电话号码 (当然,可以设置检验url等)
    label.enabledTextCheckingTypes = NSTextCheckingTypePhoneNumber;
    //对齐方式
    label.verticalAlignment = TTTAttributedLabelVerticalAlignmentCenter;
    //行间距
    label.lineSpacing = 8;
    //签个协议  点击事件通过协议方法实现
    label.delegate = self; // Delegate
    //NO 不显示下划线  ; YES 显示
//        label.linkAttributes = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCTUnderlineStyleAttributeName];
//随意给个需要检测的字符串
    NSString *text = @"客服电话:18007719999; 门牌号:23号";
//    给 label 赋值 text
    [label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
        return mutableAttributedString;
    }];
    [self.view addSubview:label];

这样,初始化就完成了; 应该没错的话,4~5位数字以上,应该是显示别的颜色,并且还会有下划线;
如果要实现点击变色的部分拨号的功能,请往下走;

3.实现点击打电话:
通过协议TTTAttributedLabelDelegate的方法:

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithPhoneNumber:(NSString *)phoneNumber {
    if ([self isRightPhoneNumeberWithString:phoneNumber Regular:@"^[1][3578][0-9]{9}$"]) {
         NSLog(@"校验后的电话号码%@", phoneNumber);
 //        打电话方法1:
//        NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",phoneNumber];
//        UIWebView * callWebview = [[UIWebView alloc] init];
//        [callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];
//        [self.view addSubview:callWebview];

//打电话方法2:
        NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",phoneNumber];
        //            NSLog(@"str======%@",str);
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
    }
}

因为变颜色的不一定是电话号,所以我使用正则表达式校验了一下,如果是电话号就提示是否拨号,如果不是电话号,就不管了,不执行;这应该是TTTAttributedLabel这个类的小小缺陷吧;

这是我自己分装的校验手机号的正则表达式方法:

#pragma  正则表达式 -------
- (BOOL)isRightPhoneNumeberWithString:(NSString *)string Regular:(NSString *)regular{
    NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern: regular options:0 error:nil];
    NSArray *result = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];
    if (result.count != 1) {
        return NO;
    }
    return YES;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值