NSScanner 过滤字符串

在使用<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 的说明。【一个字符串解析器,用于扫描字符集中的子字符或字符,以及十进制、十六进制和浮点表示形式的数值。】

3109743-6f8f3a8bba290ae6.png
常用属性有以下几个:
  • 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 其实也是一个陌生且又强大的条件判断器。

猜你喜欢

转载自blog.csdn.net/weixin_34071713/article/details/86982042