NSPredicate

作者: wpf_register | 来源:发表于2016-07-24 00:24 被阅读120次

参考文档1
参考文档2
NSPredicate

正则表达式的处理
NSString *aString = @"3www";
NSString *regex = @"[A-Za-z]+";
//MATCHES 主要用于正则匹配处理
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if (![predicate evaluateWithObject:aString]) {
            NSLog(@"aString 不是以字母开头");
        }

 
//移动号段正则表达式
 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}$";

NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];
BOOL isMatch1 = [pred1 evaluateWithObject:mobile];
        
NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];
BOOL isMatch2 = [pred2 evaluateWithObject:mobile];
        
NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];
BOOL isMatch3 = [pred3 evaluateWithObject:mobile];
        
if (isMatch1 || isMatch2 || isMatch3) {
            NSLog(@"手机号码正确");
  }else{
            NSLog(@"手机号码有误");
 }

字符串数组的处理

NSString *string = @"ng";
        
NSArray *array1 = [[NSArray alloc]initWithObjects:@"beijing",@"shanghai",@"naijing", nil];
NSArray *array2 =  [[NSArray alloc]initWithObjects:@"nanjing",@"baoji", nil];
        
//SELF 指消息接收者,数组中的具体元素
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",string]; //包括特定字符串
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@",string]; //包括特定字符串,不区分大小写
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@",string]; //以特定字符串开头
NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"SELF ENDSWITH %@",string];  //以特定字会串结尾
NSPredicate *predicate5 = [NSPredicate predicateWithFormat:@"SELF LIKE '*ng*'"];  //中间包括特定字符串
NSPredicate *predicate6 = [NSPredicate predicateWithFormat:@"SELF LIKE '???ng*'"]; //特定字符串前三个字符
NSPredicate *predicate7 = [NSPredicate predicateWithFormat:@"SELF LIKE '*ng'"]; //以特定字符串结尾
NSPredicate *predicate8 = [NSPredicate predicateWithFormat:@"SELF == %@",@"beijing"]; //等于特定字符

NSPredicate *predicate9 = [NSPredicate predicateWithFormat:@"SELF IN %@",array2];
NSPredicate *predicate10 = [NSPredicate predicateWithFormat:@"SELF IN {'beijing','shanghai'}"];

NSPredicate *predicate11 = [NSPredicate predicateWithFormat:@"length > 7"];// [object length]

NSArray *resultArray = [array1 filteredArrayUsingPredicate:predicate11];
//快速遍历数组
[resultArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
           
            NSLog(@"%@",obj);
        }];

包含对象类数组的处理

@class Test;

Test *test1 = [[Test alloc]init];    test1.name = @"老王";     test1.code = @1;
Test *test2 = [[Test alloc]init];    test2.name = @"隔壁";  test2.code = @2;
Test *test3 = [[Test alloc]init];    test3.name = @"好";    test3.code = @3;
NSArray *array = @[test1,test2,test3];
        
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name.length >= %ld",2];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"code == %@ OR name == %@",@2,@"老王"];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"code >= %@ AND name.length >= %ld",@2,2];
NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"name == %@",@"老王"];
NSPredicate *predicate5 = [NSPredicate predicateWithFormat:@"%K == %@",@"code",@2];
        
NSArray  *resultArray = [array filteredArrayUsingPredicate:predicate5];
//快速遍历数组       
[resultArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"%@",obj);
        }];

相关文章

网友评论

    本文标题:NSPredicate

    本文链接:https://www.haomeiwen.com/subject/xcbwjttx.html