Отдельные цифры в строке NSS для отображения номера телефона - PullRequest
3 голосов
/ 23 августа 2011

У меня есть NSString, который содержит что-то вроде этого:

4434332124

Как я могу превратить это в нечто подобное?

443-433-2124

Ответы [ 4 ]

12 голосов
/ 24 августа 2011

Это можно сделать всего двумя строками, просто используйте метод NSString stringWithFormat, разделите телефонный номер на отдельные подстроки и склейте все это вместе в строке формата. Примерно так:

NSString *sPhone = @"4434332124";

NSString *formatted = [NSString stringWithFormat: @"%@-%@-%@", [sPhone substringWithRange:NSMakeRange(A,B)],[sPhone substringWithRange:NSMakeRange(B,C)],
                           [sPhone substringWithRange:NSMakeRange(C,D)]];

РЕДАКТИРОВАТЬ: Рабочий код

NSString *formatted = [NSString stringWithFormat: @"%@-%@-%@", [sPhone substringWithRange:NSMakeRange(0,3)],[sPhone substringWithRange:NSMakeRange(3,3)],
                           [sPhone substringWithRange:NSMakeRange(6,4)]];
6 голосов
/ 24 августа 2011

Если вы хотите просто сделать простую быструю замену того, что вы уверены, что это 10-значный номер, попробуйте этот пример регулярного выражения ( iOS> = 3.2 ).

NSString *tenDigitNumber = @"5554449999";
tenDigitNumber = [tenDigitNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d{3})(\\d{4})"
                                                           withString:@"$1-$2-$3"
                                                              options:NSRegularExpressionSearch
                                                                range:NSMakeRange(0, [tenDigitNumber length])];
NSLog(@"%@", tenDigitNumber);
0 голосов
/ 24 августа 2011
#import <Foundation/Foundation.h>
static NSString * const theInString = @"4434332124";

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    const char      * theUniChar = theInString.UTF8String;
    NSMurableString * theResult = nil;


    for( int i = 0, c = (int)strlen(theUniChar); i < c; i+=2 )
    {
        char     thePart[4];
        sscanf( theUniChar + i, "%3s", &thePart );
        if( theResult == nil )
            theResult = [NSMutableString string];
        else
            [theResult appendFormate:@"-%3s",thePart];
    }

    printf( "%@\n", theResult );

    [pool drain];
    return 0;
}
0 голосов
/ 24 августа 2011

Не так красиво, как пытаться что-то сделать с NSFormatter (хотя, если вы не сделаете его подклассом, я не видел очевидного способа заставить его делать что-то вроде телефонных номеров), но вы можете сделать это:

NSString* newString = [NSString stringWithFormat:@"%c%c%c-%c%c%c-%c%c%c%c" [phoneNumber characterAtIndex:0],
        [phoneNumber characterAtIndex:1],
        [phoneNumber characterAtIndex:2],
        [phoneNumber characterAtIndex:3],
        [phoneNumber characterAtIndex:4],
        [phoneNumber characterAtIndex:5],
        [phoneNumber characterAtIndex:6],
        [phoneNumber characterAtIndex:7],
        [phoneNumber characterAtIndex:8],
        [phoneNumber characterAtIndex:9]];
...