在使用<ContactsUI/ContactsUI.h>
框架獲取通訊錄手機號碼時,不同的 iOS 系統最後得到的手機號碼也不同。有的是xxx-xxxx-xxxx
,有的是 xxx xxxx xxxx
。爲了得到有效的手機號碼,可以用正則過濾字符串。如以下代碼。
NSMutableString *mobile = [NSMutableString stringWithString:@"131-0000-2222"];
NSMutableString *phone = [NSMutableString string];
for(int i =0; i < [mobile length]; i++) {
NSString *temp = [mobile substringWithRange:NSMakeRange(i,1)];
NSString *regex = @"^[0-9]+$";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([pred evaluateWithObject:temp]) {
[phone appendString:temp];
}
}
除了正則外,今天要介紹的是NSScanner
過濾器。先看一下 apple 文檔裏對 NSScanner 的說明。【一個字符串解析器,用於掃描字符集中的子字符或字符,以及十進制、十六進制和浮點表示形式的數值。】
常用屬性有以下幾個:
-
charactersToBeSkipped
,設置忽略指定字符,默認是空格和回車。
-
isAtEnd
,是否掃描結束。
-
scanLocation
,掃描開始的位置。
用 NSScanner 掃描字符串得到有效的手機號碼,代碼如下:
NSString *originalStr = @"131-0000-2222";
NSMutableString *stripStr = [NSMutableString stringWithCapacity:originalStr.length];
NSScanner *scanner = [NSScanner scannerWithString:originalStr];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
while ([scanner isAtEnd] == NO) {
NSString *buffer;
if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {
[stripStr appendString:buffer];
} else {
[scanner setScanLocation:[scanner scanLocation] + 1];
}
}
平時我們用的條件判斷一般以 if
或 正則表達式
居多,NSScanner
其實也是一個陌生且又強大的條件判斷器。