2014-11-21 180 views
2

我有一個應用程序讀入用戶的聯繫人列表,但我需要將每個號碼轉換爲國際代碼的國際等值。例如,如果一個數字是07777777777,那麼結果將是+447777777777,或者如果一個數字來自土耳其,那麼它是0090,它將用+90代替。將電話號碼轉換爲國際國家代碼iOS

- (NSString *)ConvertNumberToInternational:(NSString *)number { 
if(number != nil) { 
    if(number.length > 0) { 
     NSLocale *locale = [NSLocale currentLocale]; 
     NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 
     NSDictionary *dict = [self dictCountryCodes]; 
     number = [number stringByReplacingOccurrencesOfString:@" " withString:@""]; 
     if([[number substringToIndex:1] isEqualToString:@"0"] && ![[number substringToIndex:2] isEqualToString:@"00"]) { 
      number = [NSString stringWithFormat:@"+44%@", [number stringByReplacingCharactersInRange:[number rangeOfString:@"0"] withString:@""]]; 
     } 
     if([[number substringToIndex:2] isEqualToString:@"00"]) { 
      number = [NSString stringWithFormat:@"+%@%@", [dict objectForKey:countryCode], [number substringFromIndex:2]]; 
     } 
     number = [number stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    } 
} 
return number; 
} 

-(NSDictionary *)dictCountryCodes{ 
NSDictionary *dictCodes = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"93", @"AF",@"20",@"EG", @"355", @"AL", @"213", @"DZ", @"1", @"AS", 
          @"376", @"AD", @"244", @"AO", @"1", @"AI", @"1", @"AG", 
          @"54", @"AR", @"374", @"AM", @"297", @"AW", @"61", @"AU", 
          @"43", @"AT", @"994", @"AZ", @"1", @"BS", @"973", @"BH", 
          @"880", @"BD", @"1", @"BB", @"375", @"BY", @"32", @"BE", 
          @"501", @"BZ", @"229", @"BJ", @"1", @"BM", @"975", @"BT", 
          @"387", @"BA", @"267", @"BW", @"55", @"BR", @"246", @"IO", 
          @"359", @"BG", @"226", @"BF", @"257", @"BI", @"855", @"KH", 
          @"237", @"CM", @"1", @"CA", @"238", @"CV", @"345", @"KY", 
          @"236", @"CF", @"235", @"TD", @"56", @"CL", @"86", @"CN", 
          @"61", @"CX", @"57", @"CO", @"269", @"KM", @"242", @"CG", 
          @"682", @"CK", @"506", @"CR", @"385", @"HR", @"53", @"CU", 
          @"537", @"CY", @"420", @"CZ", @"45", @"DK", @"253", @"DJ", 
          @"1", @"DM", @"1", @"DO", @"593", @"EC", @"20", @"EG", 
          @"503", @"SV", @"240", @"GQ", @"291", @"ER", @"372", @"EE", 
          @"251", @"ET", @"298", @"FO", @"679", @"FJ", @"358", @"FI", 
          @"33", @"FR", @"594", @"GF", @"689", @"PF", @"241", @"GA", 
          @"220", @"GM", @"995", @"GE", @"49", @"DE", @"233", @"GH", 
          @"350", @"GI", @"30", @"GR", @"299", @"GL", @"1", @"GD", 
          @"590", @"GP", @"1", @"GU", @"502", @"GT", @"224", @"GN", 
          @"245", @"GW", @"595", @"GY", @"509", @"HT", @"504", @"HN", 
          @"36", @"HU", @"354", @"IS", @"91", @"IN", @"62", @"ID", 
          @"964", @"IQ", @"353", @"IE", @"972", @"IL", @"39", @"IT", 
          @"1", @"JM", @"81", @"JP", @"962", @"JO", @"77", @"KZ", 
          @"254", @"KE", @"686", @"KI", @"965", @"KW", @"996", @"KG", 
          @"371", @"LV", @"961", @"LB", @"266", @"LS", @"231", @"LR", 
          @"423", @"LI", @"370", @"LT", @"352", @"LU", @"261", @"MG", 
          @"265", @"MW", @"60", @"MY", @"960", @"MV", @"223", @"ML", 
          @"356", @"MT", @"692", @"MH", @"596", @"MQ", @"222", @"MR", 
          @"230", @"MU", @"262", @"YT", @"52", @"MX", @"377", @"MC", 
          @"976", @"MN", @"382", @"ME", @"1", @"MS", @"212", @"MA", 
          @"95", @"MM", @"264", @"NA", @"674", @"NR", @"977", @"NP", 
          @"31", @"NL", @"599", @"AN", @"687", @"NC", @"64", @"NZ", 
          @"505", @"NI", @"227", @"NE", @"234", @"NG", @"683", @"NU", 
          @"672", @"NF", @"1", @"MP", @"47", @"NO", @"968", @"OM", 
          @"92", @"PK", @"680", @"PW", @"507", @"PA", @"675", @"PG", 
          @"595", @"PY", @"51", @"PE", @"63", @"PH", @"48", @"PL", 
          @"351", @"PT", @"1", @"PR", @"974", @"QA", @"40", @"RO", 
          @"250", @"RW", @"685", @"WS", @"378", @"SM", @"966", @"SA", 
          @"221", @"SN", @"381", @"RS", @"248", @"SC", @"232", @"SL", 
          @"65", @"SG", @"421", @"SK", @"386", @"SI", @"677", @"SB", 
          @"27", @"ZA", @"500", @"GS", @"34", @"ES", @"94", @"LK", 
          @"249", @"SD", @"597", @"SR", @"268", @"SZ", @"46", @"SE", 
          @"41", @"CH", @"992", @"TJ", @"66", @"TH", @"228", @"TG", 
          @"690", @"TK", @"676", @"TO", @"1", @"TT", @"216", @"TN", 
          @"90", @"TR", @"993", @"TM", @"1", @"TC", @"688", @"TV", 
          @"256", @"UG", @"380", @"UA", @"971", @"AE", @"44", @"GB", 
          @"1", @"US", @"598", @"UY", @"998", @"UZ", @"678", @"VU", 
          @"681", @"WF", @"967", @"YE", @"260", @"ZM", @"263", @"ZW", 
          @"591", @"BO", @"673", @"BN", @"61", @"CC", @"243", @"CD", 
          @"225", @"CI", @"500", @"FK", @"44", @"GG", @"379", @"VA", 
          @"852", @"HK", @"98", @"IR", @"44", @"IM", @"44", @"JE", 
          @"850", @"KP", @"82", @"KR", @"856", @"LA", @"218", @"LY", 
          @"853", @"MO", @"389", @"MK", @"691", @"FM", @"373", @"MD", 
          @"258", @"MZ", @"970", @"PS", @"872", @"PN", @"262", @"RE", 
          @"7", @"RU", @"590", @"BL", @"290", @"SH", @"1", @"KN", 
          @"1", @"LC", @"590", @"MF", @"508", @"PM", @"1", @"VC", 
          @"239", @"ST", @"252", @"SO", @"47", @"SJ", @"963", @"SY", 
          @"886", @"TW", @"255", @"TZ", @"670", @"TL", @"58", @"VE", 
          @"84", @"VN", @"1", @"VG", @"1", @"VI", nil]; 

return dictCodes; 
} 

上面的代碼不起作用,因爲我只是使用用戶的當前語言環境。我需要知道電話號碼的區域設置。任何幫助,將不勝感激!

+0

所以你認爲只是0是iphone區域總是和00是國際號碼「前綴」 – 2014-11-21 10:32:08

+0

我編輯了我的帖子以顯示我目前爲止的內容,但帶有nslocale問題 – 2014-11-21 10:37:07

+0

不明白爲什麼需要代碼 – 2014-11-21 10:38:43

回答

4

所以你認爲只是0總是iphone區和00是國際號碼「前綴」 -

#import <Foundation/Foundation.h> 

@interface T : NSObject 
@end 

@implementation T 

- (NSString *)convertNumberToInternational:(NSString *)number { 
    if(number != nil) { 
     if(number.length > 0) { 
      NSLocale *locale = [NSLocale currentLocale]; 
      NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 
      NSDictionary *dict = [self dictCountryCodes]; 
      NSString *localNumberCode = dict[countryCode]; 

      number = [number stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

      if([[number substringToIndex:1] isEqualToString:@"0"] && ![[number substringToIndex:2] isEqualToString:@"00"]) { 
       number = [NSString stringWithFormat:@"+%@%@", localNumberCode, [number substringFromIndex:1]]; 
      } 
      else if([[number substringToIndex:2] isEqualToString:@"00"]) { 
       number = [NSString stringWithFormat:@"+%@", [number substringFromIndex:2]]; 
      } 
     } 
    } 
    return number; 
} 

-(NSDictionary *)dictCountryCodes{ 
NSDictionary *dictCodes = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"93", @"AF",@"20",@"EG", @"355", @"AL", @"213", @"DZ", @"1", @"AS", 
          @"376", @"AD", @"244", @"AO", @"1", @"AI", @"1", @"AG", 
          @"54", @"AR", @"374", @"AM", @"297", @"AW", @"61", @"AU", 
          @"43", @"AT", @"994", @"AZ", @"1", @"BS", @"973", @"BH", 
          @"880", @"BD", @"1", @"BB", @"375", @"BY", @"32", @"BE", 
          @"501", @"BZ", @"229", @"BJ", @"1", @"BM", @"975", @"BT", 
          @"387", @"BA", @"267", @"BW", @"55", @"BR", @"246", @"IO", 
          @"359", @"BG", @"226", @"BF", @"257", @"BI", @"855", @"KH", 
          @"237", @"CM", @"1", @"CA", @"238", @"CV", @"345", @"KY", 
          @"236", @"CF", @"235", @"TD", @"56", @"CL", @"86", @"CN", 
          @"61", @"CX", @"57", @"CO", @"269", @"KM", @"242", @"CG", 
          @"682", @"CK", @"506", @"CR", @"385", @"HR", @"53", @"CU", 
          @"537", @"CY", @"420", @"CZ", @"45", @"DK", @"253", @"DJ", 
          @"1", @"DM", @"1", @"DO", @"593", @"EC", @"20", @"EG", 
          @"503", @"SV", @"240", @"GQ", @"291", @"ER", @"372", @"EE", 
          @"251", @"ET", @"298", @"FO", @"679", @"FJ", @"358", @"FI", 
          @"33", @"FR", @"594", @"GF", @"689", @"PF", @"241", @"GA", 
          @"220", @"GM", @"995", @"GE", @"49", @"DE", @"233", @"GH", 
          @"350", @"GI", @"30", @"GR", @"299", @"GL", @"1", @"GD", 
          @"590", @"GP", @"1", @"GU", @"502", @"GT", @"224", @"GN", 
          @"245", @"GW", @"595", @"GY", @"509", @"HT", @"504", @"HN", 
          @"36", @"HU", @"354", @"IS", @"91", @"IN", @"62", @"ID", 
          @"964", @"IQ", @"353", @"IE", @"972", @"IL", @"39", @"IT", 
          @"1", @"JM", @"81", @"JP", @"962", @"JO", @"77", @"KZ", 
          @"254", @"KE", @"686", @"KI", @"965", @"KW", @"996", @"KG", 
          @"371", @"LV", @"961", @"LB", @"266", @"LS", @"231", @"LR", 
          @"423", @"LI", @"370", @"LT", @"352", @"LU", @"261", @"MG", 
          @"265", @"MW", @"60", @"MY", @"960", @"MV", @"223", @"ML", 
          @"356", @"MT", @"692", @"MH", @"596", @"MQ", @"222", @"MR", 
          @"230", @"MU", @"262", @"YT", @"52", @"MX", @"377", @"MC", 
          @"976", @"MN", @"382", @"ME", @"1", @"MS", @"212", @"MA", 
          @"95", @"MM", @"264", @"NA", @"674", @"NR", @"977", @"NP", 
          @"31", @"NL", @"599", @"AN", @"687", @"NC", @"64", @"NZ", 
          @"505", @"NI", @"227", @"NE", @"234", @"NG", @"683", @"NU", 
          @"672", @"NF", @"1", @"MP", @"47", @"NO", @"968", @"OM", 
          @"92", @"PK", @"680", @"PW", @"507", @"PA", @"675", @"PG", 
          @"595", @"PY", @"51", @"PE", @"63", @"PH", @"48", @"PL", 
          @"351", @"PT", @"1", @"PR", @"974", @"QA", @"40", @"RO", 
          @"250", @"RW", @"685", @"WS", @"378", @"SM", @"966", @"SA", 
          @"221", @"SN", @"381", @"RS", @"248", @"SC", @"232", @"SL", 
          @"65", @"SG", @"421", @"SK", @"386", @"SI", @"677", @"SB", 
          @"27", @"ZA", @"500", @"GS", @"34", @"ES", @"94", @"LK", 
          @"249", @"SD", @"597", @"SR", @"268", @"SZ", @"46", @"SE", 
          @"41", @"CH", @"992", @"TJ", @"66", @"TH", @"228", @"TG", 
          @"690", @"TK", @"676", @"TO", @"1", @"TT", @"216", @"TN", 
          @"90", @"TR", @"993", @"TM", @"1", @"TC", @"688", @"TV", 
          @"256", @"UG", @"380", @"UA", @"971", @"AE", @"44", @"GB", 
          @"1", @"US", @"598", @"UY", @"998", @"UZ", @"678", @"VU", 
          @"681", @"WF", @"967", @"YE", @"260", @"ZM", @"263", @"ZW", 
          @"591", @"BO", @"673", @"BN", @"61", @"CC", @"243", @"CD", 
          @"225", @"CI", @"500", @"FK", @"44", @"GG", @"379", @"VA", 
          @"852", @"HK", @"98", @"IR", @"44", @"IM", @"44", @"JE", 
          @"850", @"KP", @"82", @"KR", @"856", @"LA", @"218", @"LY", 
          @"853", @"MO", @"389", @"MK", @"691", @"FM", @"373", @"MD", 
          @"258", @"MZ", @"970", @"PS", @"872", @"PN", @"262", @"RE", 
          @"7", @"RU", @"590", @"BL", @"290", @"SH", @"1", @"KN", 
          @"1", @"LC", @"590", @"MF", @"508", @"PM", @"1", @"VC", 
          @"239", @"ST", @"252", @"SO", @"47", @"SJ", @"963", @"SY", 
          @"886", @"TW", @"255", @"TZ", @"670", @"TL", @"58", @"VE", 
          @"84", @"VN", @"1", @"VG", @"1", @"VI", nil]; 

return dictCodes; 
} 
@end 

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     T*t = [[T alloc] init]; 
     NSLog(@"%@", [t convertNumberToInternational:@"05135897"]); 
     NSLog(@"%@", [t convertNumberToInternational:@"00995135897"]); 
    } 
} 
+0

已修復的問題,之前也存在,其中0很可能在末尾或中間 – 2014-11-21 10:57:23

+0

您必須做什麼才能使其通用,使00前綴模塊化,因爲在一些國家它不是00,但例如19或某些表示國際號碼的號碼 – 2014-11-21 10:58:41

+0

由於localNumberCode始終是用戶的語言環境而不是聯繫人列表中的電話號碼,因此接受的答案不會解決問題。 – GrandSteph 2015-01-30 20:13:14

0

也許你可以使用NSFormatter類。

驗證電話號碼的總長度。 (將輸入並讀作NSString

您可能需要做的事情很少,您可以跳過第一部分,即0

+0

我只是好奇。我們如何才能根據長度來驗證號碼,每個國家都有不同的電話號碼長度。 – Kampai 2014-11-21 10:30:07

+0

@Kampai:在提到它的時候,它必須作爲coredata/plist給出。 – 2014-11-21 10:32:22

+0

好的,所以我們需要爲每個國家的號碼長度提供一些預先收集的信息,其他明智的必須使用任何開源Web服務嗎? – Kampai 2014-11-21 10:34:20