2010-07-28 34 views
16

thể trùng lặp:
A comprehensive regex for phone number validationObjective-c regex để kiểm tra số điện thoại

Làm thế nào để xác nhận số điện thoại (NSString *) trong Objective-C? Quy tắc:

  • tối thiểu 7 chữ số
  • tối đa 10 chữ số
  • chữ số đầu tiên phải 2, 3, 5, 6, 8 hoặc 9

Cảm ơn

+1

Objective-C tự nó là một ngôn ngữ rất tối thiểu mà hầu như không làm bất cứ điều gì cho bạn - chắc chắn không phải là biểu thức thông thường. Nó có liên quan nhiều hơn để nói những gì các thư viện bạn đang sử dụng (Cocoa, Cocoa Touch, POC, vv). – Chuck

+0

Cocoa Touch. Cảm ơn – ohho

+1

Số điện thoại của tôi bắt đầu bằng 0 ở Vương quốc Anh hoặc số +44 khi tôi ở nước ngoài. – JeremyP

Trả lời

34

Bạn có thể sử dụng thư viện biểu thức chính quy (như RegexKit, v.v.) hoặc bạn có thể sử dụng cụm từ thông dụng thông qua NSPredicate (hơi mơ hồ hơn một chút, nhưng không yêu cầu thứ ba thư viện bên). Điều đó sẽ trông giống như sau:

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

Nếu bạn đang sử dụng iPhone thì iOS 4 giới thiệu NSRegularExpression, cũng sẽ hoạt động. Cách tiếp cận NSPredicate hoạt động trên cả Mac và iPhone (mọi phiên bản).

+0

Chỉ cần phải làm một mình, phải không :) –

+0

Điều đó chỉ hoạt động ở Hoa Kỳ. – Yuji

+0

Nó thậm chí không hoạt động trên toàn nước Mỹ, vì vậy tôi cho rằng OP có một trường hợp sử dụng chính xác hẹp mà anh ta đang xử lý. –

5

Trong iOS 4.0 + có các lớp học được xây dựng để làm điều này, NSRegularExpression

Trong mọi thứ khác, bạn có thể sử dụng thư viện RegEx của bên thứ 3 rary hoặc sử dụng NSPredicate nếu nhu cầu của bạn đủ hẹp

22

Vui lòng không sử dụng regex của riêng bạn cho số điện thoại. Không.

Định dạng số điện thoại thay đổi trên toàn quốc và ứng dụng của bạn có thể được sử dụng bên ngoài quốc gia của bạn.

Thay vào đó, hãy sử dụng những gì Apple cung cấp, như Josh nói. Xem here.

7

Lớp NSDataDetector, có sẵn trong iOS 4.0 trở lên, là lớp con chuyên biệt của NSRegularExpression có hỗ trợ rõ ràng để phát hiện số điện thoại.

11

Đối với những người tìm kiếm khai thác điện thoại, bạn có thể trích xuất các số điện thoại từ một văn bản, ví dụ:

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

Có thể trích xuất số ở định dạng quốc tế bằng NSDataDetector không? – kelin

Các vấn đề liên quan