NSPredicate的使用,超级强大
- NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...];
 
Format:
(1)比较运算符>,<,==,>=,<=,!=
可用于数值及字符串
例:@"number > 100"
(2)范围运算符:IN、BETWEEN
例:@"number BETWEEN {1,5}"
@"address IN {'shanghai','beijing'}"
(3)字符串本身:SELF
例:@“SELF == ‘APPLE’"
(4)字符串相关:BEGINSWITH、ENDSWITH、CONTAINS
例:@"name CONTAIN[cd] 'ang'" //包含某个字符串
@"name BEGINSWITH[c] 'sh'" //以某个字符串开头
@"name ENDSWITH[d] 'ang'" //以某个字符串结束
注:[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,也不区分发音符号。
(5)通配符:LIKE
例:@"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd].
@"name LIKE[cd] '???er*'"
(6)正则表达式:MATCHES
例:NSString *regex = @"^A.+e$"; //以A开头,e结尾
@"name MATCHES %@",regex
实际应用:
(1)对NSArray进行过滤
view plaincopy
- NSArray *array = [[NSArray alloc]initWithObjects:@"beijing",@"shanghai",@"guangzou",@"wuhan", nil];
 - NSString *string = @"ang";
 - NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",string];
 - NSLog(@"%@",[array filteredArrayUsingPredicate:pred]);
 
(2)判断字符串首字母是否为字母:
view plaincopy
- NSString *regex = @"[A-Za-z]+";
 - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
 - if ([predicate evaluateWithObject:aString]) {
 - }
 
(3)字符串替换:
view plaincopy
- NSError* error = NULL;
 - NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(encoding=\")[^\"]+(\")"
 - options:0
 - error:&error];
 - NSString* sample = @"<xml encoding=\"abc\"></xml><xml encoding=\"def\"></xml><xml encoding=\"ttt\"></xml>";
 - NSLog(@"Start:%@",sample);
 - NSString* result = [regex stringByReplacingMatchesInString:sample
 - options:0
 - range:NSMakeRange(0, sample.length)
 - withTemplate:@"$1utf-8$2"];
 - NSLog(@"Result:%@", result);
 
(4)截取字符串如下:
view plaincopy
- //组装一个字符串,需要把里面的网址解析出来
 - NSString *urlString=@"<meta/><link/><title>1Q84 BOOK1</title></head><body>";
 - //NSRegularExpression类里面调用表达的方法需要传递一个NSError的参数。下面定义一个
 - NSError *error;
 - //http+:[^\\s]* 这个表达式是检测一个网址的。(?<=title\>).*(?=</title)截取html文章中的<title></title>中内文字的正则表达式
 - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=title\\>).*(?=</title)" options:0 error:&error];
 - if (regex != nil) {
 - NSTextCheckingResult *firstMatch=[regex firstMatchInString:urlString options:0 range:NSMakeRange(0, [urlString length])];
 - if (firstMatch) {
 - NSRange resultRange = [firstMatch rangeAtIndex:0];
 - //从urlString当中截取数据
 - NSString *result=[urlString substringWithRange:resultRange];
 - //输出结果
 - NSLog(@"->%@<-",result);
 - }
 - }
 
(5)判断手机号码,电话号码函数
view plaincopy
- // 正则判断手机号码地址格式
 - - (BOOL)isMobileNumber:(NSString *)mobileNum
 - {
 - /**
 - * 手机号码
 - * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
 - * 联通:130,131,132,152,155,156,185,186
 - * 电信:133,1349,153,180,189
 - */
 - NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";
 - /**
 - 10 * 中国移动:China Mobile
 - 11 * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
 - 12 */
 - NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";
 - /**
 - 15 * 中国联通:China Unicom
 - 16 * 130,131,132,152,155,156,185,186
 - 17 */
 - NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$";
 - /**
 - 20 * 中国电信:China Telecom
 - 21 * 133,1349,153,180,189
 - 22 */
 - NSString * CT = @"^1((33|53|8[09])[0-9]|349)\\d{7}$";
 - /**
 - 25 * 大陆地区固话及小灵通
 - 26 * 区号:010,020,021,022,023,024,025,027,028,029
 - 27 * 号码:七位或八位
 - 28 */
 - // NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";
 - NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
 - NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
 - NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
 - NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];
 - if (([regextestmobile evaluateWithObject:mobileNum] == YES)
 - || ([regextestcm evaluateWithObject:mobileNum] == YES)
 - || ([regextestct evaluateWithObject:mobileNum] == YES)
 - || ([regextestcu evaluateWithObject:mobileNum] == YES))
 - {
 - if([regextestcm evaluateWithObject:mobileNum] == YES) {
 - NSLog(@"China Mobile");
 - } else if([regextestct evaluateWithObject:mobileNum] == YES) {
 - NSLog(@"China Telecom");
 - } else if ([regextestcu evaluateWithObject:mobileNum] == YES) {
 - NSLog(@"China Unicom");
 - } else {
 - NSLog(@"Unknow");
 - }
 - return YES;
 - }
 - else
 - {
 - return NO;
 - }
 - }
 
(6)邮箱验证、电话号码验证:
view plaincopy
- //是否是有效的正则表达式
 - +(BOOL)isValidateRegularExpression:(NSString *)strDestination byExpression:(NSString *)strExpression
 - {
 - NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", strExpression];
 - return [predicate evaluateWithObject:strDestination];
 - }
 - //验证email
 - +(BOOL)isValidateEmail:(NSString *)email {
 - NSString *strRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{1,5}";
 - BOOL rt = [CommonTools isValidateRegularExpression:email byExpression:strRegex];
 - return rt;
 - }
 - //验证电话号码
 - +(BOOL)isValidateTelNumber:(NSString *)number {
 - NSString *strRegex = @"[0-9]{1,20}";
 - BOOL rt = [CommonTools isValidateRegularExpression:number byExpression:strRegex];
 - return rt;
 - }
 
(7)NSDate进行筛选
view plaincopy
- //日期在十天之内:
 - NSDate *endDate = [[NSDate date] retain];
 - NSTimeInterval timeInterval= [endDate timeIntervalSinceReferenceDate];
 - timeInterval -=3600*24*10;
 - NSDate *beginDate = [[NSDate dateWithTimeIntervalSinceReferenceDate:timeInterval] retain];
 - //对coredata进行筛选(假设有fetchRequest)
 - NSPredicate *predicate_date =
 - [NSPredicate predicateWithFormat:@"date >= %@ AND date <= %@", beginDate,endDate];
 - [fetchRequest setPredicate:predicate_date];
 - //释放retained的对象
 - [endDate release];
 - [beginDate release];
 
Baidu Button BEGIN
Baidu Button END 172.16.140.11
Baidu Button BEGIN Baidu Button END
NSPredicate的使用,超级强大的更多相关文章
- [转]超级强大的SVG SMIL animation动画详解
		
超级强大的SVG SMIL animation动画详解 本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordp ...
 - 转载:超级强大的vim配置(vimplus)--续集
		
超级强大的vim配置(vimplus)--续集 原文地址:https://www.cnblogs.com/highway-9/p/5984285.html An automatic configura ...
 - 超级强大的vim配置(vimplus)
		
vimplus vimplus是vim的超级配置安装程序 github地址:https://github.com/chxuan/vimplus.git,欢迎star和fork. 接触vim到现在也有几 ...
 - js 模板引擎 - 超级强大
		
本来没想写这篇文章,但是网上误导大众的文章太多了,所以今天就抽出半小时时间谈一下我对前端模板引擎的感受吧. 前端模板引擎相信大家都再熟悉不过了,市面上非常多的号称最好.最快.最牛逼的,随便就能找到一大 ...
 - 超级强大的SVG SMIL animation动画详解
		
本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordpress/?p=4333 //zxx: 本文的SVG在有 ...
 - python的with语句,超级强大
		
With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Python的with语句提供了一种非常方便的处理方式.一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取 ...
 - 超级强大的socket工具ss,替代netstat
		
1.结论:ss 命令比netstat 更强大,提供功能更多,并且性能更高. 2.显示当前系统的socket占用总体宏观情况. ss -s 当已创建的socket数过多时,已经说明系统配置存在问题. 3 ...
 - [freemarker篇]06.超级强大的自定义指令
		
Freemarker的自定义指令是很强大的,非常强大,在之后的教程中我会简单的做一个示例,让大家对其有所了解!如果做Freemarker编程,请好好看看API手册,可以说里面的内容很多!也是一门独立的 ...
 - 功能超级强大的网络工具nc
		
摘自:http://www.linuxso.com/command/nc.html 功能说明:功能强大的网络工具语 法:nc [-hlnruz][-g<网关...>][-G<指向器数 ...
 
随机推荐
- [BZOJ4011][HNOI2015]落忆枫音:拓扑排序+容斥原理
			
分析 又是一个有故事的题目背景.作为玩过原作的人,看题目背景都快看哭了ToT.强烈安利本境系列,话说SP-time的新作要咕到什么时候啊. 好像扯远了嘛不管了. 一句话题意就是求一个DAG再加上一条有 ...
 - [CSP-S模拟测试]:新的世界(BFS)
			
题目背景 小学五六年级的乔猫是一个喜欢不务正业写游戏的孩纸$......$他曾经模仿著名的沙盒游戏<$Minecraft$>做过一个自己的游戏$"NEWorld"$.这 ...
 - 一句话搞定python六剑客
			
六剑客 一行搞定六剑客:三个函数:map filter reduce + lambda 切片 推导列表 python最有特点的一行代码,所有代码均可以借用一行代码(目标) 1.map(函数,列表或者字 ...
 - python函数的参数问题
			
语法 def functionname( parameters ): "函数_文档字符串" function_suite return [expression] 参数问题 必备参数 ...
 - Linux轻量级自动运维工具-Ansible浅析    转
			
转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...
 - mysql补0操作有什么意义?
			
比如我们在创建int的时候会使用int(10)这样的方式来定义某一个列,但是这样定义是没有任何意义的. Create Table showzerofill(Val1 INT(5) ZEROFILL, ...
 - 洛谷P1190 接水问题
			
题目名称:接水问题 题目来源 [洛谷P1190] (https://www.luogu.org/problemnew/show/P1190) 题目描述 学校里有一个水房,水房里一共有\(m\)个龙头 ...
 - WPF DevExpress Chart控件 界面绑定数据源,不通过C#代码进行绑定
			
<Grid x:Name="myGrid" Loaded="Grid_Loaded" DataContext="{Binding PartOne ...
 - Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
			
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public constructor Create(...); ov ...
 - SpringContextHolder使用报错
			
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/dobecoder/article/details/88401612今天在使用SpringContex ...