作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是一个普遍问题,但在 Android 和 iPhone 上对我的影响尤其大:给定一个用户和一个电话号码,我如何规范化该电话号码以真正用于存储和拨号?用户可以在他们的通讯录中有一个电话号码,格式如下:
关于用户提交此号码我所知道的事情:
这似乎是一个棘手的问题——我绝对不想向用户询问更多信息,除非我真的需要,但这些数据需要非常可信。有没有我可以在这里重用的最佳实践?
最佳答案
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/
我是一名优秀的程序员,十分优秀!