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

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

Что я знаю о пользователе, отправившем этот номер:

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

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

3
Jason Prado 15 Апр 2011 в 05:07

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

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

0
Guntis Treulands 31 Май 2012 в 14:06