3 Stimmen

Strategien zur Kanonisierung von Telefonnummern aus den Adressbüchern der Nutzer?

Das ist ein allgemeines Problem, aber es betrifft mich besonders auf Android und iPhone: Wenn ich einen Benutzer und eine Telefonnummer habe, wie kann ich diese Telefonnummer so kanonisieren, dass sie zum Speichern und Wählen tatsächlich nützlich ist? Ein Benutzer könnte eine Telefonnummer in seinem Adressbuch der Formulare haben:

  • 7-stellige US-Nummer (555-1212)
  • 10-stellige US-Nummer (210-555-1212)
  • Internationale Nummer mit + (+46-555-1212)
  • Vollständige Nummer im Land außerhalb der USA (123-555-1212)
  • Inländische, nicht-US-trunkierte Nummer (555-1212)

Was ich über den Benutzer weiß, der diese Nummer einreicht:

  • IP-Adresse
  • vielleicht ihre Telefonnummer
  • vielleicht ihr ausgewähltes Land
  • vielleicht ihre ausgewählte Region

Das scheint ein schwieriges Problem zu sein - ich möchte den Benutzer auf keinen Fall nach weiteren Informationen fragen, wenn es nicht wirklich notwendig ist, aber diese Daten müssen ziemlich vertrauenswürdig sein. Gibt es ein bewährtes Verfahren, das ich hier wiederverwenden kann?

0voto

Guntis Treulands Punkte 4725

IOS

Ok, das könnte für Sie hilfreich sein. Hoffen wir es.

In meiner App musste ich - irgendwie eine Telefonnummer aus den Kontakten holen. Also das Problem ist, wie Sie erklärt - kann mit verschiedenen -*() Zeichen, und mit-ohne Ländercodes sein.

Also - ich erhalte die Kontaktnummer über ABPeoplePickerNavigationController und erhalten Sie von der Nummer die tatsächliche Nummer und möglicherweise die Landesvorwahl mit der Funktion:

- (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:@""];
}

Außerdem benötigen Sie eine Reihe von Ländercodes: zum Beispiel:

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

Hoffentlich hilft das jemandem!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X