Это общая проблема, но особенно она затрагивает меня на Android и iPhone: учитывая пользователя и номер телефона, как я могу канонизировать этот номер телефона, чтобы он был действительно полезен для хранения и набора номера? Пользователь может иметь номер телефона в своей адресной книге форм:
- 7-значный номер США (555-1212)
- 10-значный номер США (210-555-1212)
- Международный номер с + (+46-555-1212)
- Полный номер внутри страны за пределами США (123-555-1212)
- Усеченный номер внутри страны за пределами США (555-1212)
Что я знаю о пользователе, отправившем этот номер:
- айпи адрес
- возможно их номер телефона
- возможно в выбранной стране
- возможно выбранный ими регион
Это кажется сложной проблемой — я определенно не хочу запрашивать у пользователя дополнительную информацию, если мне это действительно не нужно, но эти данные должны быть достаточно надежными. Есть ли передовой опыт, который я могу использовать здесь?
1 ответ
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
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.