格式化纯数字的电话号码的样式

当需要输入电话号码的时候,为了方便用户使用输入,其实像格式化中得'-'或者'()'等不需要用户输入,只需要输入纯数字,然后根据当前设备选择的区域进行格式化成用户习惯看到得格式。下面以"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",当需要某个国家的电话格式时,需要查找该国家的电话号码常用格式,然后进行格式化

posted @ 2015-03-27 10:38  ministercai  阅读(337)  评论(0)    收藏  举报