2010-07-28 7 views
16
를 확인

가능한 중복 :
A comprehensive regex for phone number validation목표 - C 정규식 전화 번호

어떻게 목표 - C에서 전화 번호 (있는 NSString *)를 검증하기? 규칙 :

  • 최소 7 자리
  • 최대 10 자리
  • 첫 번째 숫자, 6, 5, 3, 2이어야 8 개 항

감사

+1

목표 - C 자체가 거의 당신을 위해 무엇을하는 아주 최소한의 언어입니다 확실히 정규 표현식이 아닙니다. 사용하는 라이브러리 (코코아, 코코아 터치, POC 등)를 말하는 것이 훨씬 더 관련이 있습니다. – Chuck

+0

코코아 터치. 감사합니다 – ohho

+1

내 전화 번호는 영국에 0 또는 해외에있을 때 +44로 시작됩니다. – JeremyP

답변

34

당신은 (RegexKit 등 같은) 정규 표현식 라이브러리를 사용할 수 있습니다, 또는 당신은 (좀 더 모호한 NSPredicate를 통해 정규 표현식을 사용할 수 있지만 세 번째를 필요로하지 않는다 - 파티 라이브러리).

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

당신이 다음 아이폰 OS 4 NSRegularExpression을 도입, 아이폰에있는 경우, 또한 작동합니다 : 그것은 다음과 같이 보일 것입니다. NSPredicate 접근 방식은 Mac 및 iPhone (모든 버전)에서 작동합니다.

+0

그냥 나를 업 그레했다, 당신은하지 않았다 :) –

+0

그것은 미국에서만 작동합니다. – Yuji

+0

미국 전역에서 작동하지 않기 때문에 OP가 자신이 처리하는 정확한 범위가 좁은 유스 케이스를 갖고 있다고 가정 할 수 있습니다. –

5

아이폰 OS 4.0 +이 작업을 수행하는 클래스가 내장되어 있습니다. NSRegularExpression

다른 모든 것에서는 타사 RegEx lib 사용자의 요구가 충분히 좁은 경우 rary, 또는 NSPredicate를 사용

22

전화 번호에는 고유 한 정규식을 사용하지 마십시오.하지 마십시오.

국가마다 전화 번호 형식이 변경되어 내 앱이 자국 이외의 지역에서 사용될 수 있습니다.

대신 Josh는 Apple이 제공하는 것을 사용합니다. here을 참조하십시오.

7

iOS 4.0 이상에서 사용할 수있는 NSDataDetector 클래스는 전화 번호 검색을 명시 적으로 지원하는 NSRegularExpression의 특수 하위 클래스입니다. 전화 추출을 찾고 사람들을 위해

11

, 당신은 예를 들어, 텍스트에서 전화 번호를 추출 할 수 있습니다 :

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

NSDataDetector를 사용하여 국제 번호로 번호를 추출 할 수 있습니까? – kelin