2010-07-28 18 views
16

Powiel możliwe:
A comprehensive regex for phone number validationObjective-C regex aby sprawdzić numer telefonu

Jak zweryfikować numer telefonu (NSString *) w Objective-C? Zasady:

  • minimum 7 cyfr
  • maksymalnie 10 cyfr
  • pierwsza cyfra musi być 2, 3, 5, 6, 8 lub 9

Dzięki

+1

sama Objective-C jest bardzo minimalne język, który ledwo robi wszystko dla ciebie - na pewno nie wyrażeń regularnych. Bardziej istotne jest określenie, z jakich bibliotek korzystasz (Cocoa, Cocoa Touch, POC itd.). – Chuck

+0

Dotknięcie kakao. Dzięki – ohho

+1

Mój numer telefonu zaczyna się od 0 w Wielkiej Brytanii lub +44, gdy jestem za granicą. – JeremyP

Odpowiedz

34

Możesz użyć biblioteki wyrażeń regularnych (jak RegexKit, itp.) lub możesz użyć wyrażeń regularnych poprzez NSPredicate (nieco bardziej niejasne, ale nie wymaga trzeciej -party z bibliotekami). Że będzie wyglądać następująco:

NSString *phoneNumber = ...; 
NSString *phoneRegex = @"[235689][0-9]{6}([0-9]{3})?"; 
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; 
BOOL matches = [test evaluateWithObject:phoneNumber]; 

jeśli jesteś na iPhone, następnie wprowadzono NSRegularExpression iOS 4, która również działa. Podejście NSPredicate działa na komputerach Mac i iPhone (dowolna wersja).

+0

Po prostu musiałem się z nami podzielić, czyż nie? :) –

+0

To działa tylko w USA. – Yuji

+0

Nie działa nawet w całych Stanach Zjednoczonych, więc zakładam, że OP ma dokładnie wąski przypadek użycia, z którym ma do czynienia. –

5

w iOS 4.0 + są wbudowane klasy, aby to zrobić, NSRegularExpression

We wszystkim innym możesz użyć biblioteki RegEx innej firmy rary, lub użyj NSPredicate, jeśli twoje potrzeby są wystarczająco wąskie

22

Proszę nie używać własnego wyrażenia regularnego dla numeru telefonu. Nie rób.

Format numerów telefonów zmienia się w całym kraju, a Twoja aplikacja może być używana poza Twoim krajem.

Zamiast tego używaj tego, co zapewnia Apple, jak mówi Josh. Zobacz here.

7

Klasa , dostępna w iOS 4.0 i późniejszych, jest wyspecjalizowaną podklasą NSRegularExpression, która ma jawną obsługę wykrywania numerów telefonów.

11

Dla osób poszukujących ekstrakcji telefonu, można wyodrębnić numery telefonów z tekstu, na przykład:

NSString *userBody = @"This is a text with 30612312232 my phone"; 
if (userBody != nil) { 
    NSError *error = NULL; 
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:&error]; 
    NSArray *matches = [detector matchesInString:userBody options:0 range:NSMakeRange(0, [userBody length])]; 
    if (matches != nil) { 
     for (NSTextCheckingResult *match in matches) { 
      if ([match resultType] == NSTextCheckingTypePhoneNumber) { 
       DbgLog(@"Found phone number %@", [match phoneNumber]); 
      } 
     } 
    } 
} 

`

+0

Czy można wyodrębnić numer w formacie międzynarodowym za pomocą NSDataDetector? – kelin

Powiązane problemy