gpt4 book ai didi

android - 规范化用户地址簿中的电话号码的策略?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:57 31 4
gpt4 key购买 nike

这是一个普遍问题,但在 Android 和 iPhone 上对我的影响尤其大:给定一个用户和一个电话号码,我如何规范化该电话号码以真正用于存储和拨号?用户可以在他们的通讯录中有一个电话号码,格式如下:

  • 7 位美国号码 (555-1212)
  • 10 位美国号码 (210-555-1212)
  • 带有 + 的国际号码 (+46-555-1212)
  • 国内非美国完整号码 (123-555-1212)
  • 国内非美国截断号码 (555-1212)

关于用户提交此号码我所知道的事情:

  • IP 地址
  • 也许他们的电话号码
  • 也许他们选择的国家
  • 也许他们选择的地区

这似乎是一个棘手的问题——我绝对不想向用户询问更多信息,除非我真的需要,但这些数据需要非常可信。有没有我可以在这里重用的最佳实践?

最佳答案

iOS

好的,这可能对您有所帮助。希望如此。

在我的应用程序中,我需要 - 以某种方式从联系人那里获取电话号码。所以问题正如您所解释的那样 - 可以使用各种 -*() 字符,并且可以使用 - 不使用国家/地区代码。

所以 - 我使用 ABPeoplePickerNavigationController 获取联系电话,并从数字中获取真实号码和可能的国家代码使用函数:

- (void)saveContactPhone:(NSString *) mContactPhone
{
if(mContactPhone && [mContactPhone length])
{
if ([mContactPhone rangeOfString:@"+"].location != NSNotFound)//this means number includes country code.
{
NSString * mCCodeString = @"";

BOOL mFound = FALSE;

for(int i = 0; i<[mContactPhone length]; i++) // check number for any obvious country code.
{
if(mFound == TRUE)
{
break;
}

mCCodeString = [mContactPhone substringToIndex:i];

mCCodeString = [[mCCodeString componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];

if([mCCodeString intValue] != 1)//because This is US/CA
{
for(int j = 0; j<[pickerViewElementArray_ count]; j++)
{
if([[pickerViewElementArray_ objectAtIndex:j] intValue] == [mCCodeString intValue])
{
mFound = TRUE;

//we got ourselves final telephone number
//and we got country code!!

mContactPhone = [mContactPhone substringFromIndex:i];

break;
}
}
}

}

if(mFound == FALSE)//If no luck finding a match - lets try again, but til index 2. (find if it is +1)
{
mCCodeString = [mContactPhone substringToIndex:2];

mCCodeString = [[mCCodeString componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];

mContactPhone = [mContactPhone substringFromIndex:1];

for(int i = 0; i<[pickerViewElementArray_ count]; i++)
{
if([[pickerViewElementArray_ objectAtIndex:i] intValue] == [mCCodeString intValue])
{
//we found it!! Its +1!!!!

mFound = TRUE;

break;
}
}
}
}
}

mContactPhone = [[mContactPhone componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
}

还需要国家代码数组:例如:

NSArray *pickerViewElementArray_ = [NSArray arrayWithObjects: 
@"93",
@"355",
@"213",
@"1684",
@"376",
@"244",
....

希望对某人有所帮助!

关于android - 规范化用户地址簿中的电话号码的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5671411/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com