Стратегии канонизации телефонных номеров из адресных книг пользователей? - PullRequest
3 голосов
/ 15 апреля 2011

Это общая проблема, но она затрагивает меня особенно на Android и iPhone: учитывая пользователя и номер телефона, как я могу канонизировать этот номер телефона, чтобы он был полезен для хранения и набора номера? Пользователь может иметь номер телефона в своей адресной книге форм:

  • 7-значный номер США (555-1212)
  • 10-значный номер США (210-555-1212)
  • Международный номер с + (+ 46-555-1212)
  • Полный номер за пределами США (123-555-1212)
  • Сокращенный номер за пределами США (555-1212)

Вещи, которые я знаю о пользователе, отправляющем этот номер:

  • IP-адрес
  • возможно их номер телефона
  • возможно выбранная ими страна
  • возможно их выбранный регион

Это кажется сложной проблемой - я определенно не хочу просить пользователя о дополнительной информации, если только мне это не нужно, но эти данные должны быть достаточно надежными. Есть ли лучшая практика, которую я могу использовать здесь?

1 Ответ

0 голосов
/ 31 мая 2012

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",
    ....

Надеюсь, что это кому-нибудь поможет!

...