string中识别手机号

    xiaoxiao2021-12-14  58

    昨天在开发查看物流的过程中,遇到这么一个场景: 当某一条物流信息的字符串中包含电话号码,然后显示的时候将电话号码用不同的颜色显示,并且点单这个号码时提示是否拨号; 当时百度了一下,有用的资料不好找, 找了很多关键字才碰上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; }
    转载请注明原文地址: https://ju.6miu.com/read-969002.html

    最新回复(0)