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 |