Estrategias para canonizar los números de teléfono de las libretas de direcciones de los usuarios?

Este es un problema general, pero me está afectando particularmente en Android y iPhone: dado un usuario y un número de teléfono, ¿cómo puedo canonicalizar ese número de teléfono para ser realmente útil para almacenar y marcar? Un usuario puede tener un número de teléfono en su libreta de direcciones de los formularios:

  • Número de Estados Unidos de 7 dígitos (555-1212)
  • Número de Estados Unidos de 10 dígitos (210-555-1212)
  • Número internacional con + (+ 46-555-1212)
  • Número completo en el país fuera de Estados Unidos (123-555-1212)
  • Número truncado no estadounidense en el país (555-1212)

Cosas que sé sobre el usuario que envía este número:

  • dirección IP
  • Tal vez su número de teléfono
  • Quizás su país seleccionado
  • Quizás su región seleccionada

Esto parece un problema difícil- definitivamente no quiero pedirle al usuario más información a menos que realmente necesite, pero estos datos necesitan ser bastante confiables. ¿Hay una mejor práctica que puedo reutilizar aquí?

IOS

Ok, esto sólo podría ser útil para usted. Ojala.

En mi aplicación que necesitaba – de alguna manera obtener un número de teléfono de los contactos. Así que el problema es como usted explicó – puede ser con varios – * () caracteres, y con-sin códigos de país.

Por lo tanto, obtengo el número de contacto usando ABPeoplePickerNavigationController y obtengo del número número verdadero y posible – código del país usando la función:

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

También usted necesita el arsenal del código del país: por ejemplo:

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

Espero que ayude a alguien!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.