Być może lepszym rozwiązaniem byłoby usunięcie wszystkich nie numerycznych znaków numeru telefonu do sprawdzania poprawności, aby po prostu pozostawiono ciąg liczb.
Wyrażenia regularne mogą się łatwo zepsuć, o ile nie są bardzo surowe w ich wprowadzaniu, a ponieważ numery telefonów różnią się tak bardzo na całym świecie, w ten sposób można obsługiwać dowolny numer telefonu bez konieczności tworzenia bardzo skomplikowanego wyrażenia regularnego.
można po prostu użyć prostego sposobu takiego:
- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber {
NSCharacterSet *illegalCharacters = [NSCharacterSet characterSetWithCharactersInString:@" +()-"];
return [[phoneNumber componentsSeparatedByCharactersInSet:illegalCharacters] componentsJoinedByString:@""];
}
Więc zamiast +1 (555) 123-4567
Byłbyś Wystarczy porównać 15551234567
. Jeśli przechowujesz to w bazie danych, prawdopodobnie chcesz w dowolnej chwili kontrolować format wyświetlania w interfejsie użytkownika, a porównywanie liczb całkowitych jest szybsze niż porównywanie ciągów dla dużych zestawów danych, więc możesz po prostu przechowywać [sanitizedPhoneNumber intValue];
w bazie danych jako NSNumber
Inną metodą za pomocą prostego wyrażenia regularnego, by pozwolić jedynie numery 0-9 (source):
- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber {
return [phoneNumber stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [phoneNumber length])];
}
działa mi ładnie: '\\ ([0-9] {3} \\) \\ s [0-9] {3} - [0-9] {4}'. – holex
lub ... jeśli chcesz, aby białe spacje były opcjonalne: '\\ ([0-9] {3} \\) \\ s? [0-9] {3} - [0-9] {4 } ' – holex
lub ... jeśli chcesz zezwolić na wiele białych znaków:' \ ([0-9] {3} \) (\ s *)? [0-9] {3} - [0-9] {4} '... albo powinienem był je stworzyć i odpowiedzieć, czyż nie? – holex