处理从海外打电话给美国的最佳方式?

时间:2012-02-05 21:30:33

标签: iphone ios cocoa-touch

我有一个广播节目的应用程序,其中包括许多电话号码,全部是美国。我收到了一位国际用户的反馈,他提到需要将“+1”添加到数字中以便在国际上工作。处理这个问题的最佳方法是什么?

我可以只为所有数字添加+1吗?或者这会对国内来电者造成奇怪的收费吗?

如果是这样,我是否需要提供偏好,或者是否有一些可靠的本地化或地理信息我可以在需要时自动添加+1?

3 个答案:

答案 0 :(得分:1)

在处理国际电话号码时,您必须使用所谓的E164格式,该格式描述了每个国家/地区的电话号码的国际格式。在我详细介绍之前,我想说的是,如果你在一个国家(在这个例子中说是美国),那么你是否添加+1并不重要,因为当发出呼叫时,运营商会自动添加它。但是当你走遍全球时,你需要采用E164格式才能保证安全。

个人我在我的一个应用程序中需要这样的东西,我做了一个个人功能,将电话号码作为字符串和国家代码(也作为字符串)并返回该号码的E164格式。

为什么我这样做了?因为如您所知,在某个设备上,您可能会看到以不同布局存储的数字,如:

  • (02)1234 5678
  • 02 1234 5678
  • 0411 123 123
  • 1 300 123 123
  • 1300 123 123
  • 02-1234-5678
  • 1300-234-234
  • +44 78 1234 1234
  • + 44-78-1234-1234
  • 0011 44​​ 78 1234 1234
  • (44)078 1234 1234

您需要先处理它们才能使用它们。我的功能没有考虑这种格式的数字:+ 44-(0)78-1234-1234但你可以在需要时添加它。

这是我的功能:

- (NSString *) phoneToE164:(NSString *)originalString CountryCode:(NSString *)countryCode
{
    //strip the string from symbols
    NSString *strippedString = [[originalString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
    NSMutableString *finalString = [NSMutableString stringWithString:strippedString];

    //if the first character is + your done
    if( [originalString characterAtIndex:0] == '+' )
    {
        [finalString insertString:@"+" atIndex:0];
    }

    //if the first 2 characters are 00 replace them by +
    else if( ([finalString characterAtIndex:0] == '0') && ([finalString characterAtIndex:1] == '0') )
    {
        [finalString deleteCharactersInRange:NSMakeRange(0, 2)];
        [finalString insertString:@"+" atIndex:0];
    }

    //if the first character is 0 replace it with country code
    else if( [finalString characterAtIndex:0] == '0' )
    {
        [finalString deleteCharactersInRange:NSMakeRange(0, 1)];
        [finalString insertString:countryCode atIndex:0];
    }

    //anything else is unknown format, just insert the country code
    else if( [finalString characterAtIndex:0] != '0' )
    {
        [finalString insertString:countryCode atIndex:0];
    }

    //return the result
    return(finalString);
}

顺便说一下,这个功能不仅适用于美国的任何国家,只需发送你想要的国家代码即可。

答案 1 :(得分:0)

不,+1不应该导致问题 - 我住在英国,并且我的所有号码都以+44为前缀,以避免任何可能的问题。

答案 2 :(得分:0)

不,它不会产生任何额外费用。即使美国人也可以在电话号码的开头加+1,也不会产生任何影响。