2010-07-28 5 views
16

Possible en double:
A comprehensive regex for phone number validationregex Objective-c pour vérifier le numéro de téléphone

Comment valider un numéro de téléphone (NSString *) en c objectif? Règles:

  • minimum de 7 chiffres
  • maximum 10 digits
  • le premier chiffre doit être de 2, 3, 5, 6, 8 ou 9

Merci

+1

Objective-C lui-même est une langue très minime qui ne presque rien pour vous - Certainement pas des expressions régulières. Il est beaucoup plus pertinent de dire quelles bibliothèques vous utilisez (Cocoa, Cocoa Touch, POC, etc.). – Chuck

+0

Cocoa Touch. Merci – ohho

+1

Mon numéro de téléphone commence par un 0 au Royaume-Uni ou +44 quand je suis à l'étranger. – JeremyP

Répondre

34

Vous pouvez utiliser une bibliothèque d'expressions régulières (comme RegexKit, etc.), ou vous pouvez utiliser des expressions régulières via NSPredicate (un peu plus obscure, mais ne nécessite pas de troisième bibliothèques de parties). Cela ressemblerait à quelque chose comme ceci:

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

Si vous êtes sur iPhone, puis iOS 4 introduit NSRegularExpression, qui fonctionne également. L'approche NSPredicate fonctionne aussi bien sur Mac et iPhone (toute version).

+0

Je devais juste me prendre une seule fois, n'est-ce pas? –

+0

Cela ne marche qu'aux États-Unis. – Yuji

+0

Cela ne fonctionne même pas dans l'ensemble des États-Unis, donc je suppose que le PO a un cas d'utilisation très précis dont il s'occupe. –

5

dans l'IOS 4,0 + on construit dans les classes pour ce faire, NSRegularExpression

dans tout ce que vous pouvez utiliser une 3ème partie RegEx lib ou utilisez un NSPredicate si vos besoins sont suffisamment étroits

22

S'il vous plaît ne pas utiliser votre propre regex pour le téléphone numéro. Ne pas.

Le format des numéros de téléphone des changements à travers le pays, et votre application peuvent être utilisés en dehors de votre propre pays.

Au lieu de cela, utiliser ce que Apple fournit, comme le dit Josh. Voir here.

7

La classe NSDataDetector, disponible dans iOS 4.0 et versions ultérieures, est une sous-classe spécialisée de NSRegularExpression qui prend explicitement en charge la détection des numéros de téléphone.

11

Pour ceux qui cherchent l'extraction du téléphone, vous pouvez extraire les numéros de téléphone à partir d'un texte, par exemple:

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

Est-il possible d'extraire des nombres au format international en utilisant NSDataDetector? – kelin

Questions connexes