我有一个广播节目的应用程序,其中包括许多电话号码,全部是美国。我收到了一位国际用户的反馈,他提到需要将“+1”添加到数字中以便在国际上工作。处理这个问题的最佳方法是什么?
我可以只为所有数字添加+1吗?或者这会对国内来电者造成奇怪的收费吗?
如果是这样,我是否需要提供偏好,或者是否有一些可靠的本地化或地理信息我可以在需要时自动添加+1?
答案 0 :(得分:1)
在处理国际电话号码时,您必须使用所谓的E164格式,该格式描述了每个国家/地区的电话号码的国际格式。在我详细介绍之前,我想说的是,如果你在一个国家(在这个例子中说是美国),那么你是否添加+1并不重要,因为当发出呼叫时,运营商会自动添加它。但是当你走遍全球时,你需要采用E164格式才能保证安全。
个人我在我的一个应用程序中需要这样的东西,我做了一个个人功能,将电话号码作为字符串和国家代码(也作为字符串)并返回该号码的E164格式。为什么我这样做了?因为如您所知,在某个设备上,您可能会看到以不同布局存储的数字,如:
您需要先处理它们才能使用它们。我的功能没有考虑这种格式的数字:+ 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,也不会产生任何影响。