格式化纯数字的电话号码的样式
当需要输入电话号码的时候,为了方便用户使用输入,其实像格式化中得'-'或者'()'等不需要用户输入,只需要输入纯数字,然后根据当前设备选择的区域进行格式化成用户习惯看到得格式。下面以"en_US"区域做个例子。"en_US"的电话号码的格式如下:1 (234) 567-8901,代码如下:
-(NSString*) encodePhoneNumber:(NSString*) phone
{
NSLocale* locale = [NSLocale currentLocale];
if( [[locale localeIdentifier] compare:@"en_US"]!=NSOrderedSame )
return phone;
if( [phone length]==0 )
return phone;
if( [phone rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet] ].location==NSNotFound )
{
const char* string = [phone UTF8String];
NSInteger length = [phone lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
if(string[0] - '0'==1 )
{
if( length > 11 )
return phone;
NSMutableData* array = [[[NSMutableData alloc] init] autorelease];
for( int i=0; i < length; i++ )
{
if( i==1 )
{
[array appendBytes:" (" length:2];
}
if( i == 4 )
{
[array appendBytes:") " length:2];
}
if( i==7 )
{
[array appendBytes:"-" length:1];
}
[array appendBytes:string++ length:1];
}
[array appendBytes:"\0" length:1];
NSString * value=[NSString stringWithUTF8String:[array bytes]];
if([value length]==4||[value length]==5||[value length]==6)
{
value=[value stringByAppendingString:@")"];
}
return value;
}
else
{
// (012) 345-6789
if( length > 10 )
return phone;
NSMutableData* array = [[[NSMutableData alloc] init] autorelease];
int i=0;
if( length <=7 )
{
for( i=0; i < length; i++ )
{
if( i==3 )
{
[array appendBytes:"-" length:1];
}
[array appendBytes:string++ length:1];
}
}
else
{
for( i=0; i < length; i++ )
{
if( i==0 )
[array appendBytes:"(" length:1];
if( i==3 )
[array appendBytes:") " length:2];
if( i==6 )
[array appendBytes:"-" length:1];
[array appendBytes:string++ length:1];
}
}
[array appendBytes:"\0" length:1];
NSString * value=[NSString stringWithUTF8String:(const char*)[array bytes]];
return value;
}
}
return phone;
}
以上仅仅是"en_US",当需要某个国家的电话格式时,需要查找该国家的电话号码常用格式,然后进行格式化

浙公网安备 33010602011771号