2013-05-02 76 views
5

我的電話號碼格式爲(987)786-5645。NSPredicate的電話號碼

- (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]; 
} 

我正在使用上面的代碼。

應該是什麼這個確切的正則表達式規則?我能夠找出數字和括號。

我應該用什麼檢測閉架之後的空白?

+0

它對我很好用:'\\([0-9] {3} \\)\\ s [0-9] {3} - [0-9] {4}'。 – holex 2013-05-02 13:35:42

+0

或...如果你想空白可選只有:'\\([0-9] {3} \\)\\ S [0-9] {3} - [0-9] {4 }' – holex 2013-05-02 13:46:21

+0

或...如果你想允許多空格:'\([0-9] {3} \)(\ s *)?[0-9] {3} - [0-9] {4}'......或者我應該爲他們創造並回答,不是嗎? – holex 2013-05-02 13:51:54

回答

3

這個替換您pNRegex,

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

希望它可以幫助你。

3

也許一個更好的解決辦法是讓你只是留下了一串數字剝離進行驗證電話號碼的所有非數字字符。除非你是非常嚴格,它們的輸入和自電話號碼的差距都很大了世界各地,這種方式可以讓你支持任何一個電話號碼,而無需創建一個非常複雜的正則表達式

正則表達式可以容易折斷。

你可以使用這樣一個簡單的方法:

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

所以不是+1 (555) 123-4567

你只比較15551234567。如果要將其存儲在數據庫中,則可能需要控制格式以便在UI上顯示,並且整數比較比大型數據集的字符串比較快,因此您可以將[sanitizedPhoneNumber intValue];作爲NSNumber

使用簡單的regex允許的另一種方法只有數字0-9(source):

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

用這句話,它爲我工作

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

檢查這一個我t'l正常工作對您的FORMATT,

如果你想給特殊chrectars像空間

,(,),然後追加該charectar以//

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 

,如果你想給尾架使用這一個空間後,

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:現在工作嗎? – Balu 2013-05-03 04:59:48