NSPredicate的坑,正则表达式不管是否添加“^ 或 $”,系统会自动添加开始字符和结束字符,和咱们日常使用的不太同样,因此要写出完整的匹配表达式。正则表达式
NSString *regex = @"^[\u4e00-\u9fa5A-Za-z].*$";lua
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];spa
BOOL isValid = [predicate evaluateWithObject:self.cardpname];code
= , ==
: 判断两个表达式是否相等
orm
>= , =>
: 判断左边表达式的值是否大于或等于
右边表达式的值对象
<= , =<
: 判断左边表达式的值是否小于或等于
右边表达式的值blog
>
: 判断左边表达式的值是否大于
右边表达式的值字符串
<
: 判断左边表达式的值是否小于右边表达式的值it
!= , <>
: 判断左边表达式的值是否与右边表达式的值不相等模板
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:表明正在被判断的对象自身