2013-02-28 14 views
14

Questo è il mio primo tentativo di creare un'app ios.Come rimuovere caratteri non numerici dal numero di telefono nell'obiettivo-c?

Sto utilizzando il selettore di persone per chiedere all'utente un numero di telefono, ma quando recupera con il codice di seguito, il mio NSString *phone appare come (0) 111192222-2222. Vengo dal Brasile e qui la maschera corretta per i numeri di cellulare è (01111) 92222-2222 (il 9 è opzionale, alcuni numeri ne hanno altri no). Come riparare questa maschera? O rimuoverlo interamente?

- (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

Potrebbe essere più specifico? Se NSString è '(0) 111192222-2222' cosa vorresti che fosse? – matt

+0

Per rimuovere completamente i caratteri è probabilmente più semplice scorrere semplicemente su di essi, copiarli dalla stringa A alla stringa B e rimuovere quelli che non si desidera. Sì, probabilmente puoi usare RE e quant'altro, ma perché rendere il codice più oscuro? –

risposta

40

Vai a questa risposta: https://stackoverflow.com/a/6323208/60488

In sostanza:

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

Per il vostro caso si consiglia di rimuovere i caratteri "-", "(" e ")" dal set di caratteri.

+0

Grazie, questo è molto più pulito e veloce di quello che stavo facendo con 'stringByReplacingOccurrencesOfString' e gli altri rispondono. –

+3

Solo per aggiungere alcune informazioni.Dopo aver studiato quel codice avrei effettivamente fatto '[NSCharacterSet decimalDigitCharacterSet]' perché è nell'API e si adatta alle mie esigenze! –

+0

Chiaro, mi piace l'uso di invertedSet. –

1

userei l'espressione regolare per convalidare il numero di telefono invece di uccidere me stesso per fare una tastiera personalizzata, quali funzioni possono essere modificate da aggiornamenti iOS. Quindi, consenti tutti i caratteri e convalidi all'interno del codice.

2

È possibile utilizzare alcuni metodi di NSString e NSMutableString come:

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

Questo sembra un approccio molto fragile. Prona a crash se il numero di telefono indicato è più breve del previsto. –

+0

@JohanKool: D'accordo con te, ma come da domanda dell'OP questa è la soluzione. Tuttavia, se lo chiede, la soluzione può essere modificata con tutti i tipi di valicdaions –

+0

Nella domanda che ho menzionato ** il 9 è opzionale, alcuni numeri non ne fanno altri ** quindi si bloccherebbe con determinati numeri di telefono, ma grazie per la soluzione Risolve quel caso. –

2

Penso che ci siano modi per risolvere questo:

  1. Uso NSRegularExpression per rimuovere qualsiasi cosa, ma i numeri. È possibile see here o here per sapere come convalidare il numero di telefono.
  2. Scrivi il tuo scanner per rimuovere i caratteri che non ti servono. Remove blanks o remove all but numbers.
  3. Utilizzare UITextFieldDelegate, scrivere il metodo textField:shouldChangeCharactersInRange:replacementString:, controllare la stringa di sostituzione se è nell'intervallo 0-9.

La speranza aiuta.

+0

Ti do un punto a causa delle belle adizioni a mia conoscenza e perché risponde alla mia domanda, ma l'altra risposta di seguito lo trovo più pulito e veloce per ottenere ciò che stavo per fare. –

Problemi correlati