2013-05-02 41 views
5

Định dạng số điện thoại của tôi là (987) 786-5645.NSPredicate cho số điện thoại

- (BOOL)validatePhoneNumberWithString:(NSString*)phone 
{ 
    NSString *pNRegex = @"[(0-9)]{3}+\\ +\\[0-9-]{3}+\\[0-9]{4}"; 
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; 
    return [PNTest evaluateWithObject:phone]; 
} 

Tôi đang sử dụng mã trên.

Quy tắc regex chính xác cho điều này là gì? Tôi có thể tìm ra các chữ số và các dấu ngoặc vuông.

Tôi nên sử dụng thông tin gì để phát hiện khoảng trắng sau khi đóng khung?

+0

nó làm việc cho tôi độc đáo: '\\ ([0-9] {3} \\) \\ s [0-9] {3} - [0-9] {4}'. – holex

+0

hoặc ... nếu bạn muốn đặt khoảng trắng chỉ: '\\ ([0-9] {3} \\) \\ s? [0-9] {3} - [0-9] {4 } ' – holex

+0

hoặc ... nếu bạn muốn cho phép nhiều khoảng trắng:' \ ([0-9] {3} \) (\ s *)? [0-9] {3} - [0-9] {4} '... hoặc tôi nên tạo và trả lời cho họ, phải không? – holex

Trả lời

3

Thay pNRegex của bạn với điều này,

NSString *pNRegex = @"^(\\([0-9]{3}\\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$"; 

Hy vọng nó sẽ giúp bạn.

3

Có thể giải pháp tốt hơn là loại bỏ tất cả các ký tự không phải số của số điện thoại để xác thực để bạn chỉ còn lại một chuỗi số.

Cụm từ thông dụng có thể dễ dàng tách ra trừ khi bạn rất nghiêm ngặt với đầu vào của mình và vì số điện thoại thay đổi rất nhiều trên thế giới, theo cách này sẽ cho phép bạn hỗ trợ bất kỳ số điện thoại nào mà không phải tạo biểu thức chính quy phức tạp.

Bạn chỉ có thể sử dụng một phương pháp đơn giản như thế này:

- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber { 
    NSCharacterSet *illegalCharacters = [NSCharacterSet characterSetWithCharactersInString:@" +()-"]; 
    return [[phoneNumber componentsSeparatedByCharactersInSet:illegalCharacters] componentsJoinedByString:@""]; 
} 

Vì vậy, thay vì +1 (555) 123-4567

Bạn chỉ muốn so sánh 15551234567. Nếu bạn đang lưu trữ trong cơ sở dữ liệu, bạn có thể muốn kiểm soát định dạng anyways để hiển thị trên giao diện người dùng và so sánh số nguyên nhanh hơn so sánh chuỗi cho tập dữ liệu lớn để bạn có thể lưu [sanitizedPhoneNumber intValue]; trong cơ sở dữ liệu dưới dạng NSNumber

một phương pháp sử dụng một Regex đơn giản chỉ cho phép những con số 0-9 (source):

- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber { 
    return [phoneNumber stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [phoneNumber length])]; 
} 
1

sử dụng biểu thức này, nó làm việc cho tôi

NSString *pNRegex = @"\\([0-9]{3}\\) [0-9]{3}\\-[0-9]{4}"; 
1

việc kiểm tra này một i t'l hoạt động tốt cho formatt của bạn,

nếu bạn muốn cho chrectars đặc biệt như không gian, (,) sau đó nối charectar rằng với //

NSString *[email protected]"(123)123-1234"; 
    NSString *pNRegex = @"\\([0-9]{3}\\)[0-9]{3}\\-[0-9]{4}"; 
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; 
    BOOL check=[PNTest evaluateWithObject:phone ]; 
    NSLog(@"%i",check); 

O/P: -

(123)123-1234 - check=1 

(123123-1234 - check=0 

(123) 123-1234 - check=0 

nếu bạn muốn mang đến cho không gian sau khi sử dụng hết khung này,

NSString *[email protected]"(123) 123-1234"; 
    NSString *pNRegex = @"\\([0-9]{3}\\)\\ [0-9]{3}\\-[0-9]{4}"; 
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; 
    BOOL check=[PNTest evaluateWithObject:phone ]; 
    NSLog(@"%i",check); 

O/P: -

(123) 123-1234 - check=1 

(123123-1234 - check=0 

(123)123-1234 - check=0 
+0

@Hinata Hyuga: giờ nó có hoạt động không? – Balu

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