您的位置:首页 > 其它

string中识别手机号

2016-12-03 14:26 330 查看
昨天在开发查看物流的过程中,遇到这么一个场景: 当某一条物流信息的字符串中包含电话号码,然后显示的时候将电话号码用不同的颜色显示,并且点单这个号码时提示是否拨号;

当时百度了一下,有用的资料不好找, 找了很多关键字才碰上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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐