iOS之NSPredicate(正则表达式和UIBarController):谓词

  • //  实例化对象的头文件

  • @property (nonatomic, strong)NSString *name;
    @property (nonatomic, assign)NSString *sex;
    @property (nonatomic, assign)NSInteger tel;
    @property (nonatomic, assign)NSInteger qq;

    - (Member *)initWithDic:(NSDictionary *)dic;
    + (Member *)memberWithDic:(NSDictionary *)dic;

  • // 构造函数的实现

- (Member *)initWithDic:(NSDictionary *)dic
{
    if (self = [super init])
    {
        _name = dic[@"name"];
        _sex = dic[@"sex"];
        _tel = [dic[@"tel"] integerValue];
        _qq = [dic[@"qq"] integerValue];
    }
    return self;
}

+ (Member *)memberWithDic:(NSDictionary *)dic
{
    return [[self alloc] initWithDic:dic];
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"name = %@, sex = %@, qq = %lu, tel = %lu", _name, _sex, _qq, _tel];
}


  • // 获取数据源:实例化plist文件

// 不能使用NSBundle获取路径
        NSArray *arrData = [NSArray arrayWithContentsOfFile:@"/Users/Mu/Desktop/谓词和正则表达式/谓词和正则表达式/iOSclass(2).plist"];
        
        // 集合存储所有实例化对象:将plist实例化
        //(模型化):取对象的属性进行判断,操作集合和集
        NSMutableArray *arrMember = [NSMutableArray array];
        
        for (NSArray *arrGroup in arrData)
        {
        for (NSDictionary *dicMember in arrGroup)
            {
                [arrMember addObject:[[Member alloc] initWithDic:dicMember]];
            }
        }
        // 字符串需要使用单引号,语句大小写不敏感但属性属于变量大小写敏感
               
        // 1.关系运算
        // - 判断是否(包含判断对象是否相同)
        NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name == ‘燕江‘ and qq = 287143225"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate1])
        {
            NSLog(@"1.%@", mem);
        }
        
        // 2.关系运算
        // <=等效=< ; !=和<> ; =>和>= ; !和not; 相等=和==,and和&& ; or和||
        NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"NOT name.length <= 3"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate2])
        {
            NSLog(@"2.%@", mem);
        }
        
        // 3.CONTAINS
        // - [c] 忽略大小写
        // - [d] 忽略重音符号
        // - [cd]既不区分大小写,也不区分发音符号
        NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"name CONTAINS[cd]%@", @"燕"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate3])
        {
            NSLog(@"3.%@", mem);
        }

// 4.BEGINSWITH和ENDSWITH:判断以声明开头或结尾
        NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@", @"燕"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate4])
        {
            NSLog(@"4.%@", mem);
        }
        NSPredicate *predicate5 = [NSPredicate predicateWithFormat:@"name ENDSWITH %@", @"燕"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate5])
        {
            NSLog(@"4.%@", mem);
        }
        
        // 5.通配符like
        // - *代表一个或者多个或者是空
        // - ?代表一个字符
        NSPredicate *predicate6 = [NSPredicate predicateWithFormat:@"name like %@", @"*江"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate6])
        {
            NSLog(@"5.%@", mem);
        }

// 6.关系运算
        // - IN {}: 判断指定集合内对象是否存在(和多个使用OR连接等效)
        NSPredicate *predicate7 = [NSPredicate predicateWithFormat:@"tel IN {18798812696, 18798815221}"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate7])
        {
            NSLog(@"6.%@", mem);
        }
        NSPredicate *predicate8 = [NSPredicate predicateWithFormat:@"name IN %@", @[@"燕江", @"刘木"]];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate8])
        {
            NSLog(@"6.%@", mem);
        }
        // 7.关系运算
        // - BETWEEN {}: 指定范围,判断数据源是

NSPredicate *predicate9 = [NSPredicate predicateWithFormat:@"tel BETWEEN {18798812696, 18798815221}"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate9])
        {
            NSLog(@"7.%@", mem);
        }

// 8.关系运算
        // - NOT最常见的用法就是从一个数组中剔除另外一个数组的数据
        // - 比起循环比较再加到新数组中,简单的不止一两点。
        NSArray *arrayFilter = @[@"abc1", @"abc2"];
        NSArray *arrayContent = @[@"a1", @"abc1", @"abc4", @"abc2"];
        NSPredicate *thePredicate = [NSPredicate predicateWithFormat:@"NOT (SELF in %@)", arrayFilter];
        NSLog(@"8.%@",[arrayContent filteredArrayUsingPredicate:thePredicate]);
        
        // 9.block
        // - 参数evaluatedObject表示数组成员
        // - block必须返回YES或者NO,分别表示匹配还是不匹配
        NSPredicate *predicate10 = [NSPredicate predicateWithBlock:^BOOL(id  _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings)
        {
            Member *mem = (Member *)evaluatedObject;
            if (mem.name.length>4)
            {
                return YES;
            }else
            {
                return false;
            }
        }];
        
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate10])
        {
        NSLog(@"9.%@", mem);
        }
        
        // 10.多重筛选
        // - 如果需要匹配数个属性的筛选,用AND或者OR来串联显然有点麻烦
        // - NSCompoundPredicate可以将多个NSPredicate对象的组合
        // - 组合方式可以是AND或者OR以及NOT:调用类方法创建需要的参数是NSPredicate对象组成的集合
        
        // 11.注意点
        // - %K的K必须是大写: 使用%@ = %@会出现不能匹配
        NSPredicate *predicate11 = [NSPredicate predicateWithFormat:@"%@ = %@", @"name", @"燕江"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate11])
        {
            NSLog(@"10.%@", mem);
        }
        NSPredicate *predicate12 = [NSPredicate predicateWithFormat:@"%K = %@", @"name", @"燕江"];
        for (Member *mem in [arrMember filteredArrayUsingPredicate:predicate12])
        {
            NSLog(@"10.%@", mem);
        }
        
        
        // 12.正则表达式
        NSPredicate *pri  = [NSPredicate predicateWithFormat:@"SELF MATChES %@",  @"^[1-9](\\d{5,11})"];
        NSLog(@"12.判断是否是qq号:%s", ([pri evaluateWithObject:@"287143225"]==YES)?"YES":"NO");

时间: 2024-12-15 20:38:11

iOS之NSPredicate(正则表达式和UIBarController):谓词的相关文章

iOS之谓词(NSPredicate)(正则表达式和UIBarController)

iOS之NSPredicate(正则表达式和UIBarController) 本文转发至:https://segmentfault.com/a/1190000000623005 NSPredicate,这个类和我上一篇博文中提到的valueForKeyPath一样很强大.它的使用主要集中在两个方法中 NSArray - (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate; NSMutableArray - (void)f

iOS开发-NSPredicate

Cocoa中谓词(Predicate)提供了一个通用的查询方式处理数据,可以获取和指定数据的过滤形式,Cocoa实际开发中可以是使用NSPredicate及其父类NSComparisonPredicate和NSCompoundPredicate.其风格类似于SQL查询语言和正则表达式的混合体,提供了具有表现力的,自然语言界面来定义一个集合被搜寻的逻辑条件.一般来说稍微操作过数据库基本上很容易理解其中的方法,至于使用的方法也很简单. 集合中的NSPredicate Foundation提供使用谓词

iOS中常用正则表达式含义

\d 匹配任何一个数字,即[0-9] \d+表示1个以上的数字 \d*标示0个或多个数字 \s 表示分隔符,包括空格.制表符和换行符 \s* 0个或多个分隔符 \w 表示字母.数字和下划线,这里还包括Unicode字符,不同的语言里有些不同 \w{4} 表示4个非空白字符 . 表示任何一个字符,不包括换行符 .* 表示任何多个字符,当然也不包括换行符了 ^([0-9]) 表示数字开头 ([0-9])$ 表示数字结尾 ([0-9A-Za-z]) 表示数字字母 | 表示或的关系,如\d|\w 表示数

iOS中的正则表达式运用

一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式达到字符串的复杂控制. 二.正则表达式的语法 看一个过滤纯数字的例子 - (BOOL)validateNumber:(NSString *) textString { NSString* [email protected]"^[0-9]+$"; NSPredicate *numberPre

0524.深入浅出理解iOS常用的正则表达式—基础篇[Foundation]

参考资料:cocoachina的zys475481075的文章 几个单词 Regular  ['regj?l?] adj. 定期的:有规律的 Expression [?k'spre?(?)n; ek-] n. 表现,表示 Regular expression 正则表达式 什么是正则表达式? 用一个描述字符串去验证另一个字符串是否符合描述字符串的特征.(不严谨,可以这么理解) 思考:比如表达式"12+",描述的意思是一个1和任意个2组成的字符串,那么'12'.'122'.'122'-.都

iOS 中文字符判断 正则NSRegularExpression 谓词NSPredicate 和 NSRange

废话不说,直接上代码 #pragma mark - 中文字符判断 - (BOOL)validateContainsChinese:(NSString *)content { NSRegularExpression *regularexpression = [[NSRegularExpression alloc] initWithPattern:@"^[\u4e00-\u9fa5]" options:NSRegularExpressionCaseInsensitive error:nil

ios输入内容正则表达式的应用

原文链接:http://www.haogongju.net/art/1595705 由于最近开发ios的程序,由于需要正则表达式的验证,比较麻烦. 正则表达式的用法比较多,可以网上搜索一下,但是使用的过程中会根据问题区分. 目前的需求就是,输入的内容不可以是汉字,也不可以有空格,代码如下,判断汉字主要是根据字符所占用的字节数判断. BOOL hasChinese = NO; int length = [str length]; for (int i=0; i NSRange range = NS

iOS开发-正则表达式的使用方法

前言:在表单验证中,我们经常会使用到正则,因为我们需要用它来判断用户输入的字符是否为合法的,如果是不合法的,那么应该提示用户输入错误,并不让提交至服务器.我们也可以通过正则表达式,从用户输入的字符串中过滤并获取我们想要的特定部分.总而言之,正则表达式是非常强大的. 方法一.谓词(NSPredicate)创建正则表达式 使用它来判断用户输入的字符串是否为合法的: // 编写正则表达式:只能是数字或英文,或两者都存在 NSString *regex = @"^[a-z0-9A-Z]*$";

iOS中的正则表达式[转]

1. 下面一个简单的使用正则表达式的一个例子:NSRegularExpression 类 -(void)parseString{ //组装一个字符串,需要把里面的网址解析出来 NSString *[email protected]"sfdsfhttp://www.baidu.com"; //NSRegularExpression类里面调用表达的方法需要传递一个NSError的参数.下面定义一个 NSError *error; //http+:[^\\s]* 这个表达式是检测一个网址的.