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等


好了废话不多说了,直接上代码(文件下载请前往 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
原创粉丝点击