iOS中的谓词NSPredicate

时间:2023-01-30 08:46:13

NSPredicate的坑,正则表达式无论是否添加“^ 或 $”,系统会自动添加开始字符和结束字符,和我们平常使用的不太一样,所以要写出完整的匹配表达式。

NSString *regex = @"^[\u4e00-\u9fa5A-Za-z].*$";

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

BOOL isValid = [predicate evaluateWithObject:self.cardpname];

 

一、基本用法

①比较运算符

= , == : 判断两个表达式是否相等

>= , => : 判断左边表达式的值是否大于或等于右边表达式的值

<= , =< : 判断左边表达式的值是否小于或等于右边表达式的值

> : 判断左边表达式的值是否大于右边表达式的值

< : 判断左边表达式的值是否小于右边表达式的值

!= , <> : 判断左边表达式的值是否右边表达式的值不相等

NSNumber *test = @(555);
NSPredicate
*predicate = [NSPredicate predicateWithFormat:@"SELF > 55"];
if ([predicate evaluateWithObject:test]) {
NSLog(
@"test:%@", test);
}

②逻辑运算符

AND、&&:逻辑与,要求两个表达式的值都为YES时,结果才为YES。

OR、||:逻辑或,要求其中一个表达式为YES时,结果就是YES

NOT、!:逻辑非,对原有的表达式取反

③字符串的运算符

BEGINSWITH:检查字符串是否以指定的字符串开头(如判断字符串是否以a开头:BEGINSWITH 'a')

 ENDSWITH:检查字符串是否以指定的字符串结尾(如判断字符串是否以a结尾:ENDSWITH 'a')

 CONTAINS:检查字符串是否包含指定的字符串(如判断字符串是否包含a:CONTAINS 'a')

 LIKE:检查某个字符串是否匹配指定的字符串模板。

     其之后可以跟?代表一个字符和*代表任意多个字符两个通配符。

     比如"name LIKE '*ac*'",这表示name的值中包含ac则返回YES;

     "name LIKE '?a'",表示name的第2个字符为a时返回YES。

 MATCHES:检查某个字符串是否匹配指定的正则表达式。虽然正则表达式的执行效率是最低的,但其功能是最强大的,也是我们最常用的。

④集合运算符

BETWEEN :必须满足表达式 BETWEEN {下限, 上限}的格式,要求该表达式必须大于或等于下限,并小于或等于上限。

 IN :必须满足表达式 IN {元素0, 元素1, 元素2...}的格式,要求该表达式必须包含有{}中的任一元素。

 ANY , SOME : 集合中任意一个元素满足条件,就返回YES

 ALL : 集合所有元素满足条件,才返回YES

 NONE : 集合中没有任何元素元素满足条件,就返回YES

⑤直接量

FALSE、NO:代表逻辑假

TRUE、YES:代表逻辑真

 NULL、NIL:代表空值

 SELF:代表正在被判断的对象自身