voip 앱을 만들다가 필요에 의해서 직접 아이폰 전화 어플에 전화 번호 하나하나 넣는 노가다를 통해서 확인하여 기본적인 국내 통화의 대쉬 규칙을 리스팅하여 함수로 만들었다.
규칙은 아래와 같다
- 1로 시작하는 세자리까지 대쉬 없음
- 2로 시작하는 번호는 1-3-4 1-4-4
- 0으로 시작하는 번호
- 02로 시작하는 번호 2-3-4, 2-4-4
- 013로 시작하는 번호 4-3-4, 4-4-4
- 015로 시작하는 번호 5-4
- 010, 011, 012, 016, 017, 018, 019로 시작하는 번호 3-3-4, 3-4-4
- 그외에 0으로 시작하는 번호 3-3-4
- 0또는 2외에 시작하지 않는 경우
- 15, 16, 17, 18, 19로 시작하는 경우 4-4
- 15를 제외한 나머지는 8자리 이상일떄 2-3-4- 2-4-4
- 그외의 경우 2-3-4 2-4-4
- 15, 16, 17, 18, 19로 시작하는 경우 4-4
소스는 아래와 같고 사용법은
+ (NSString *) makePhoneNumber:(NSString*) phoneNumStr;
요 메소드에 대쉬가 없는 전화 번호를 NSString 형태로 넣어주면 대쉬가 붙어서 NSString으로 return 해준다.
Global이라는 class 안에서 구현되었다.
// 뒷부분이 3-4 인경우 스트링 만들어줌
+ (NSString *) make34:(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt { if([phoneNumStr length] > headCodeCnt && [phoneNumStr length] <= headCodeCnt + 3) { return [NSString stringWithFormat:@"%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringFromIndex:headCodeCnt]]; } else if ([phoneNumStr length] > headCodeCnt + 3 && [phoneNumStr length] < headCodeCnt + 8) { return [NSString stringWithFormat:@"%@-%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringWithRange:NSMakeRange(headCodeCnt, 3)], [phoneNumStr substringFromIndex:headCodeCnt + 3]]; } else { return phoneNumStr; } } // 뒷부분이 3-4 4-4 인경우 스트링 만들어줌 + (NSString *) make34_44 :(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt{ if([phoneNumStr length] > headCodeCnt && [phoneNumStr length] < headCodeCnt + 8) { return [self make34:phoneNumStr withHeadCodeCnt:headCodeCnt]; } else if ([phoneNumStr length] == headCodeCnt + 8) { return [NSString stringWithFormat:@"%@-%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringWithRange:NSMakeRange(headCodeCnt, 4)], [phoneNumStr substringFromIndex:headCodeCnt + 4]]; } else { return phoneNumStr; } } // 두개로 + (NSString *) makeHalf:(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt { if([phoneNumStr length] > headCodeCnt && [phoneNumStr length] <= headCodeCnt + 4) { return [NSString stringWithFormat:@"%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringFromIndex:headCodeCnt]]; } else { return phoneNumStr; } } + (NSString *) makePhoneNumber :(NSString *)phoneNumStr { NSArray* specialCode334_344 = [[[NSArray alloc] initWithObjects:@"010", @"011", @"012", @"016", @"017", @"018", @"019", @"070",nil] autorelease]; NSArray* specialCode44 = [[[NSArray alloc] initWithObjects:@"15", @"16", @"17", @"18", @"19", nil] autorelease]; if([phoneNumStr hasPrefix:@"1"] && [phoneNumStr length] <= 3) { return phoneNumStr; } else if([phoneNumStr hasPrefix:@"2"]) { return [Global make34_44:phoneNumStr withHeadCodeCnt:1]; } else if([phoneNumStr hasPrefix:@"0"]) { // 0으로 시작되는 번호 if([phoneNumStr length] > 2 && [phoneNumStr hasPrefix:@"02"]) { // 02로 시작되는 번호 2-3-4 2-4-4 규칙 return [Global make34_44:phoneNumStr withHeadCodeCnt:2]; } else if([phoneNumStr length] > 3){ // 판별 코드가 3자리 if([phoneNumStr hasPrefix:@"014"]) { // 014경우 아애 안한다 return phoneNumStr; } else if([phoneNumStr hasPrefix:@"013"]) { // 013경우 4-3-4 4-4-4 return [Global make34_44:phoneNumStr withHeadCodeCnt:4]; } else if([phoneNumStr hasPrefix:@"015"]) { // 015경우 5-4 return [Global makeHalf:phoneNumStr withHeadCodeCnt:5]; } else if([specialCode334_344 indexOfObject:[phoneNumStr substringToIndex:3]] != NSNotFound) { // 3-3-4 3-4-4 규칙 return [Global make34_44:phoneNumStr withHeadCodeCnt:3]; } else { return [Global make34:phoneNumStr withHeadCodeCnt:3]; } } else { return phoneNumStr; } } else { // 그외의 숫자로 시작할경우 if([phoneNumStr length] > 2) { if([specialCode44 indexOfObject:[phoneNumStr substringToIndex:2]] != NSNotFound) { // 4-4 규칙 if(![phoneNumStr hasPrefix:@"15"] && [phoneNumStr length] > 8) { // 15 로 시작하는경우가 아니면 8자리 이상 다시 처리 return [Global make34_44:phoneNumStr withHeadCodeCnt:2]; } else { return [Global makeHalf:phoneNumStr withHeadCodeCnt:4]; } } else { // 두개로 나눠지는 경우가 아닌 경우 대부분 return [Global make34_44:phoneNumStr withHeadCodeCnt:2]; } } else { return phoneNumStr; } } }
반응형
'2013 이전 > iOS개발' 카테고리의 다른 글
[iPhone 개발] UITableViewCell 위에 UIImageView에 roundCorner 적용 (0) | 2017.02.25 |
---|---|
[iPhone 개발] UITableView 상단 공백 만들기 (0) | 2017.02.25 |
[iPhone 개발] UIImageView 이벤트 처리 (0) | 2017.02.25 |
[iPhone 개발] UITableViewCell 이벤트관리 메소드 (0) | 2017.02.25 |
[iPhone 개발] superview 혹은 superview 의 ViewController object 얻어 오기 (0) | 2017.02.25 |