string中识别手机号
2016-12-03 14:26
330 查看
昨天在开发查看物流的过程中,遇到这么一个场景: 当某一条物流信息的字符串中包含电话号码,然后显示的时候将电话号码用不同的颜色显示,并且点单这个号码时提示是否拨号;
当时百度了一下,有用的资料不好找, 找了很多关键字才碰上TTTAttributedLabel这个类;
下面,我来简单的使用这个类来完成这个场景;
1.首先, 需要到gitHub上下载这个类包 , 其中一个.h和.m
2.在需要label的地方,将TTTAttributedLabel替换原来的UILabel; 这是初始化TTTAttributedLabel; TTTAttributedLabel是继承UILabel的,所以UILabel的属性TTTAttributedLabel是都能使用的;
这样,初始化就完成了; 应该没错的话,4~5位数字以上,应该是显示别的颜色,并且还会有下划线;
如果要实现点击变色的部分拨号的功能,请往下走;
3.实现点击打电话:
通过协议TTTAttributedLabelDelegate的方法:
因为变颜色的不一定是电话号,所以我使用正则表达式校验了一下,如果是电话号就提示是否拨号,如果不是电话号,就不管了,不执行;这应该是TTTAttributedLabel这个类的小小缺陷吧;
这是我自己分装的校验手机号的正则表达式方法:
当时百度了一下,有用的资料不好找, 找了很多关键字才碰上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; }
相关文章推荐
- string转utf8后解决TTS识别中文的问题
- LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。
- LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。
- iOS7时代我们用什么来追踪和识别用户?udid?OpenUDID ?UUIDString
- [置顶] Android OCR文字识别 实时扫描手机号(极速扫描单行文本方案)
- 【福分系统】 LINQ to Entities 不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。
- Linq中int转String(解决LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式.)
- LINQ to Entities 不识别方法“System.Guid Parse(System.String)”,因此该方法无法转换为存储表达式。
- Linq LINQ to Entities 不识别方法“System.String ToString(System.Object)”
- LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式 的解决方法
- LINQ to Entities 不识别方法“Int32 ToInt32(System.String) 或 “Int32 Parse(System.String)”
- CSV 文件处理成 String[] ,网银下载的文本中使用逗号分割, 使用双引号标记字段. 使用String split 会出现把引号中的逗号识别的情况 例如 " ,,,, " , "aaa"
- LINQ to Entities 不识别方法"System.String ToString()"
- “LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式。”
- LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。
- String.format与手机设置的语言环境的关系导致语言转换系统无法识别闪退问题
- 每日20行之1~~~识别并修改String中的一部分,StringBuffer、StringTokenizer
- Sqlite日期类型问题:该字符串未被识别为有效的 DateTime(String not recognized as a valid datetime)
- LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式 的解决方法
- Linq中字段数据类型转换问题(Linq to entity,LINQ to Entities 不识别方法"System.String ToString()"问题解决)