使用国家/地区代码iOS将电话号码转换为国际

时间:2014-11-21 10:25:05

标签: ios objective-c

我有一个应用程序读取用户的联系人列表,但我需要使用国家/地区代码将每个数字转换为国际等效。例如,如果一个数字是07777777777,那么结果将是+447777777777,或者如果一个数字来自土耳其并且它是0090,它将用+90替换它。

- (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;
}

上面的代码不起作用,因为我只是使用用户的当前语言环境。我需要知道电话号码的区域设置。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分: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"]);
    }
}

答案 1 :(得分:0)

可能你可以使用NSFormatter类。

验证电话号码的总长度。 (将输入并读作NSString

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