iOS判断国内固定电话区号
来源:互联网 发布:天津城建大学学校域名 编辑:程序博客网 时间:2024/06/10 03:45
最近在项目中需要对用户填写的固定电话做处理希望要的格式为例如 010-12345678 样式的。
但很不巧的是我在iOS客户端可以严格约束用户输入指定格式的固定电话(使用两个文本框,一个用来接收区号,一个用来接收座机号码),但问题是android客户端没有做处理,所以如果在iOS客户端显示android填写的座机号(格式形如 01012345678)就会出现可读性不高的问题(区号与号码使用连字符分隔开不是可读性更高吗?),至于问什么android那边没有做处理这里就不讨论了,我们就来看看在iOS客户端如何对座机号做格式化(将形如01012345678的号码格式化为010-12345678的样式)
实现思路:
主要是判断号码中区号的位数,因为有3位数区号和4位数区号,号码部分基本上是7/8位
3位数区号总共就那么几位(010,020,021,022,023,024,025,027,028,029),关键就是4位数区号的判断上了,例如 03xx,04xx,05xx等
但很不巧的是我在iOS客户端可以严格约束用户输入指定格式的固定电话(使用两个文本框,一个用来接收区号,一个用来接收座机号码),但问题是android客户端没有做处理,所以如果在iOS客户端显示android填写的座机号(格式形如 01012345678)就会出现可读性不高的问题(区号与号码使用连字符分隔开不是可读性更高吗?),至于问什么android那边没有做处理这里就不讨论了,我们就来看看在iOS客户端如何对座机号做格式化(将形如01012345678的号码格式化为010-12345678的样式)
实现思路:
主要是判断号码中区号的位数,因为有3位数区号和4位数区号,号码部分基本上是7/8位
3位数区号总共就那么几位(010,020,021,022,023,024,025,027,028,029),关键就是4位数区号的判断上了,例如 03xx,04xx,05xx等
好了废话不多说了,直接上代码(文件下载请前往 http://www.cocoachina.com/bbs/read.php?tid-333873.html)
/** *@brief固定电话区号格式化(将形如 01085792889 格式化为 010-85792889) * *@return返回格式化后的号码(形如 010-85792889) */- (NSString*)areaCodeFormat{ // 先去掉两边空格 NSMutableString *value = [NSMutableString stringWithString:[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; // 先匹配是否有连字符/空格,如果有则直接返回 NSString *regex = @"^0\\d{2,3}[- ]\\d{7,8}$"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex]; if([predicate evaluateWithObject:value]){ // 替换掉中间的空格 return [value stringByReplacingOccurrencesOfString:@" " withString:@"-"]; } // 格式化号码 三位区号 regex = [NSString stringWithFormat:@"^(%@)\\d{7,8}$",[self regex_areaCode_threeDigit]]; predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex]; if([predicate evaluateWithObject:value]){ // 插入连字符 "-" [value insertString:@"-" atIndex:3]; return value; } // 格式化号码 四位区号 regex = [NSString stringWithFormat:@"^(%@)\\d{7,8}$",[self regex_areaCode_fourDigit]]; predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex]; if([predicate evaluateWithObject:value]){ // 插入连字符 "-" [value insertString:@"-" atIndex:4]; return value; } return nil;}/** *@brief验证固定电话区号是否正确(e.g. 010正确,030错误) * *@return返回固定电话区号是否正确 */- (BOOL)isAreaCode{ NSString *regex = [NSString stringWithFormat:@"^%@|%@$",[self regex_areaCode_threeDigit],[self regex_areaCode_fourDigit]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex]; if([predicate evaluateWithObject:self]){ return YES; } return NO;}/** *@brief获取三位数区号的正则表达式(三位数区号形如 010) */- (NSString*)regex_areaCode_threeDigit{ return @"010|02[0-57-9]";}/** *@brief获取四位数区号的正则表达式(四位数区号形如 0311) */- (NSString*)regex_areaCode_fourDigit{ // 03xx NSString *fourDigit03 = @"03([157]\\d|35|49|9[1-68])"; // 04xx NSString *fourDigit04 = @"04([17]\\d|2[179]|[3,5][1-9]|4[08]|6[4789]|8[23])"; // 05xx NSString *fourDigit05 = @"05([1357]\\d|2[37]|4[36]|6[1-6]|80|9[1-9])"; // 06xx NSString *fourDigit06 = @"06(3[1-5]|6[0238]|9[12])"; // 07xx NSString *fourDigit07 = @"07(01|[13579]\\d|2[248]|4[3-6]|6[023689])"; // 08xx NSString *fourDigit08 = @"08(1[23678]|2[567]|[37]\\d)|5[1-9]|8[3678]|9[1-8]"; // 09xx NSString *fourDigit09 = @"09(0[123689]|[17][0-79]|[39]\\d|4[13]|5[1-5])"; return [NSString stringWithFormat:@"%@|%@|%@|%@|%@|%@|%@",fourDigit03,fourDigit04,fourDigit05,fourDigit06,fourDigit07,fourDigit08,fourDigit09]; }
0 0
- iOS判断国内固定电话区号
- java代码校验手机号,带区号固定电话和400类型的固定电话
- 世界各国电话区号定义
- 国家电话区号
- 国内固定电话和传真的正则表达式
- 行政区划邮政编码身份证号码电话区号
- 026电话区号之争!
- 中国电话区号(CSV)
- 判断固定电话和手机号码的正则表达式
- C#关于手机和固定电话的简单判断
- 更好请我电话区号屋地
- 国际冠码与国际电话区号
- android国家代码/国际电话区号选择器
- 区号
- 国内航空公司及电话
- 固定电话简单组网
- js验证固定电话
- 【javascript】中国省市区号JSON格式数据--2017年为准,含省市名称和电话区号
- 欢迎使用CSDN-markdown编辑器
- 使用ViewPage时ViewPage中的页面重置问题
- getClass()和getSimpleName()的区别和作用
- 如何看路由表!
- ArrayList中的数组为什么被transient修饰
- iOS判断国内固定电话区号
- linux命令
- 瀑布流布局
- T检验和F检验的由来
- linux中probe函数传递参数的寻找(下)
- Chromium Weekly 3
- JavaSE(13)(异常和文件类)
- 【discuz免费插件】众大智能云采集5.0版
- Jmeter