简年9:利用NSRegularExpression正则表达式过滤数组中的11位电话号码

//  ViewController.h
//  正则表达式练习
//
//  Created by zengchunjun on 16/10/8.
//  Copyright © 2016年 zeng. All rights reserved.
//

#import 

@interface ViewController : UIViewController


@end

//
//  ViewController.m
//  正则表达式练习
//
//  Created by zengchunjun on 16/10/8.
//  Copyright © 2016年 zeng. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,strong)NSMutableArray *testArray;
@property (nonatomic,strong)NSMutableArray *phoneNumbers;
@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.phoneNumbers = [NSMutableArray array];
    self.testArray = [[NSMutableArray alloc ]  initWithObjects:@"137624 05923",@"136158fs78910",@"13062405923",@"13418 141808",@"134",@"1341352136138",@"1776 2405923",nil];
    // 判断是否是手机号码
    NSMutableArray *newArray = [self selectedPhoneNumber:self.testArray];
    NSLog(@"%@",newArray);
    
    // 替换指定的字符
   [self replaceReguationItems:self.testArray];
    NSLog(@"%@",self.testArray);
    
}

// 把是电话号码的元素替换成88888888
- (void)replaceReguationItems:(NSMutableArray *)aArray
{
    /**
     * 移动号段正则表达式
     */
    NSString *CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
    /**
     * 联通号段正则表达式
     */
    NSString *CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";
    /**
     * 电信号段正则表达式
     */
    NSString *CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";
    
    // 一个判断是否是手机号码的正则表达式
    NSString *pattern = [NSString stringWithFormat:@"(%@)|(%@)|(%@)",CM_NUM,CU_NUM,CT_NUM];
    
    NSRegularExpression *regularExpression = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
    
    for (int i = 0; i < aArray.count; i++) {
        
        NSString *item = aArray[i];
        item = [item stringByReplacingOccurrencesOfString:@" " withString:@""];
        
        NSArray *matches = [regularExpression matchesInString:item options:0 range:NSMakeRange(0, item.length)];
        if (matches.count == 1 && item.length == 11) {
            
            for (NSTextCheckingResult *matchResult in matches) {
                
                NSString *replacedStr = [regularExpression stringByReplacingMatchesInString:item options:0 range:matchResult.range withTemplate:@"88888888"];
                [self.testArray replaceObjectAtIndex:i withObject:replacedStr];
            }
        }
        
    }
    
    
}

// 筛选出是手机号码的元素
- (NSMutableArray *)selectedPhoneNumber:(NSMutableArray *)aArray
{
    /**
     * 移动号段正则表达式
     */
    NSString *CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
    /**
     * 联通号段正则表达式
     */
    NSString *CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";
    /**
     * 电信号段正则表达式
     */
    NSString *CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";
    
    // 一个判断是否是手机号码的正则表达式
    NSString *pattern = [NSString stringWithFormat:@"(%@)|(%@)|(%@)",CM_NUM,CU_NUM,CT_NUM];
    
    NSRegularExpression *regularExpression = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
    
    for (int i = 0;i < aArray.count;i++) {
        
        NSString *mobile = [aArray[i] stringByReplacingOccurrencesOfString:@" " withString:@""];
        if (mobile.length != 11) {
            continue;
        }
        
        // 无符号整型数据接收匹配的数据的数目
        NSUInteger numbersOfMatch = [regularExpression numberOfMatchesInString:mobile options:NSMatchingReportProgress range:NSMakeRange(0, mobile.length)];
        if (numbersOfMatch>0) {
            NSLog(@"%d-手机号码:%@",i,mobile);
            [self.phoneNumbers addObject:mobile];
        }
        
    }
    
    return self.phoneNumbers;
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

你可能感兴趣的:(简年9:利用NSRegularExpression正则表达式过滤数组中的11位电话号码)