2013-02-28 16 views
14

To jest moja pierwsza próba stworzenia aplikacji ios.Jak usunąć znaki numeryczne z numeru telefonu w celu-c?

Używam selektora osób, aby poprosić użytkownika o podanie numeru telefonu, ale gdy zostanie on pobrany przy użyciu poniższego kodu, mój numer NSString *phone jest widoczny (0) 111192222-2222. Jestem z Brazylii i tutaj poprawna maska ​​dla numerów telefonów komórkowych to (01111) 92222-2222 (9 jest opcjonalne, niektóre numery mają inne). Jak naprawić tę maskę? Lub usunąć całkowicie?

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier 
{ 
    ABMultiValueRef multiValue = ABRecordCopyValue(person, property); 
    CFIndex index = ABMultiValueGetIndexForIdentifier(multiValue, identifier); 
    NSString *phone = (__bridge NSString *)ABMultiValueCopyValueAtIndex(multiValue, index); 
    return NO; 
} 
+0

Czy mógłbyś być bardziej konkretny? Jeśli NSString to '(0) 111192222-2222', co by to miało być? – matt

+0

Aby całkowicie usunąć znaki, najprościej jest po prostu je przerobić, skopiować je z ciągu A do łańcucha B i usunąć te, których nie chcesz. Tak, prawdopodobnie możesz używać REs i innych, ale dlaczego sprawić, by kod był bardziej niejasny? –

Odpowiedz

40

Zobacz tę odpowiedź: https://stackoverflow.com/a/6323208/60488

zasadniczo:

NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"-+()"] invertedSet]] componentsJoinedByString:@""]; 

Twoim przypadku może chcesz usunąć znaki "-", "(" i ")" z zestawu znaków.

+0

Dziękuję, to jest bardziej czystsze i bardziej skomplikowane niż to, co robiłem z 'stringByReplacingOccurrencesOfString', a inne odpowiedzi. –

+3

Wystarczy dodać trochę informacji.Po przestudiowaniu tego kodu robiłbym '[NSCharacterSet decimalDigitCharacterSet]' ponieważ jest w API i pasuje do moich potrzeb! –

+0

Zręczny, podoba mi się użycie odwróconego zestawu. –

1

chciałbym użyć wyrażenia regularnego sprawdzania poprawności numeru telefonu zamiast zabijania siebie, aby klawiaturę niestandardowe funkcje, które mogą być zmienione przez aktualizacje iOS. Tak, pozwól wszystkim postaciom i sprawdź poprawność wewnątrz kodu.

2

Można użyć kilku metod NSString i NSMutableString jak:

NSString *[email protected]"(0) 111192222-2222"; 
//I'm from Brazil and here the correct mask for mobile phone numbers is (01111) 92222-2222 
NSMutableString *editPhone=[NSMutableString stringWithString:[phone stringByReplacingOccurrencesOfString:@")" withString:@""]]; 
editPhone=[NSMutableString stringWithString:[editPhone stringByReplacingOccurrencesOfString:@" " withString:@""]]; 

[editPhone insertString:@") " atIndex:6]; 


NSLog(@"%@",editPhone);//(01111) 92222-2222 
+2

To wydaje się bardzo delikatne podejście. Skłonny do awarii, jeśli podany numer telefonu jest krótszy niż oczekiwano. –

+0

@JohanKool: Zgadzam się z tobą, ale jak na pytanie OP jest to rozwiązanie. Jeśli jednak poprosi o to, to rozwiązanie można zmienić przy użyciu różnych rodzajów parametrów. –

+0

W pytaniu, które wspomniałem, że ** 9 jest opcjonalne, niektóre liczby mają inne, więc ** nie zawiesiłoby się z pewnymi numerami telefonów, ale dziękuję za rozwiązanie. TO ROZWIĄZUJE tę sprawę. –

2

Myślę, że istnieją sposoby, aby rozwiązać ten problem:

  1. Korzystanie NSRegularExpression usunąć niczego oprócz numerów. Ty może see here lub here wiedzieć, jak sprawdzić numer telefonu.
  2. Napisz swój własny skaner, aby usunąć znaki, których nie potrzebujesz. Remove blanks lub remove all but numbers.
  3. Użyj metody , napisz textField:shouldChangeCharactersInRange:replacementString:, sprawdź kod zastępczy, jeśli znajduje się w zakresie od 0-9.

Nadzieja pomaga.

+0

Daj ci punkt ze względu na miłe wyrazy mojej wiedzy i dlatego, że odpowiada na moje pytanie, ale druga odpowiedź poniżej jest dla mnie bardziej czystym i droższym sposobem osiągnięcia tego, co zamierzałem. –

Powiązane problemy