也許一個更好的解決辦法是讓你只是留下了一串數字剝離進行驗證電話號碼的所有非數字字符。除非你是非常嚴格,它們的輸入和自電話號碼的差距都很大了世界各地,這種方式可以讓你支持任何一個電話號碼,而無需創建一個非常複雜的正則表達式
正則表達式可以容易折斷。
你可以使用這樣一個簡單的方法:
- (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])];
}
它對我很好用:'\\([0-9] {3} \\)\\ s [0-9] {3} - [0-9] {4}'。 – holex 2013-05-02 13:35:42
或...如果你想空白可選只有:'\\([0-9] {3} \\)\\ S [0-9] {3} - [0-9] {4 }' – holex 2013-05-02 13:46:21
或...如果你想允許多空格:'\([0-9] {3} \)(\ s *)?[0-9] {3} - [0-9] {4}'......或者我應該爲他們創造並回答,不是嗎? – holex 2013-05-02 13:51:54