在现阶IOS开发的样式越来越多,我们在开发APP的时候难免会遇到对用户的登录和注册进行操作,但是登录注册如果想要做的人性化少不了的就是校验,对当前用户的登录信息进行校验,如果满足要求我们会把用户注册的信息存入数据库如果不满足信息我们需要重新提示用户输入,涉及到校验我们离不开的就是正则表达式,下面我们一起来学习一下IOS如何操作正则表达式。
1、正则表达式的语法我们在这里不详细介绍,如果对这个不熟悉的可以参考网站:http://www.cnblogs.com/light169/archive/2006/10/18/532347.html
2、下面我们简单的定义一个正在表达式
//正则表达式 匹配烟台本地电话号码 NSString * pattern=@"^0535-\\d{6}$"; //待匹配字符串 NSString * str=@"0535-6062799";
IOS中主要提供了两种方式处理正则表达式,一种是block的形式,一种是非block的形式下面我们逐个使用一下:
方式一:
//定义并且初始化一个NSRegularExpression对象 NSRegularExpression * reg=[[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionDotMatchesLineSeparators error:nil];
在初始化方法中有一个options参数这个参数是一个枚举类型,我们点击去api如下:
我们简单翻译一下
NSRegularExpressionCaseInsensitive //不区分字母大小写的模式
NSRegularExpressionAllowCommentsAndWhitespace //忽略掉正则表达式中的空格和#号之后的字符
NSRegularExpressionIgnoreMetacharacters //将正则表达式整体作为字符串处理
NSRegularExpressionDotMatchesLineSeparators //允许.匹配任何字符,包括换行符
NSRegularExpressionAnchorsMatchLines //允许^和$符号匹配行的开头和结尾
NSRegularExpressionUseUnixLineSeparators //设置\n为唯一的行分隔符,否则所有的都有效。
NSRegularExpressionUseUnicodeWordBoundaries //使用Unicode TR#29标准作为词的边界,否则所有传统正则表达式的词边界都有效
//调用matchesInString 方法返回匹配数组 NSArray * array= [reg matchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, [str length])];
当前方法中也是有options选项,我们点击去查看
翻译成中文
NSMatchingReportProgress = 1 << 0, //找到最长的匹配字符串后调用block回调
NSMatchingReportCompletion = 1 << 1, //找到任何一个匹配串后都回调一次block
NSMatchingAnchored = 1 << 2, //从匹配范围的开始出进行极限匹配
NSMatchingWithTransparentBounds = 1 << 3, //允许匹配的范围超出设置的范围
NSMatchingWithoutAnchoringBounds = 1 << 4 //禁止^和$自动匹配行还是和结束
//数组里面装的是NSTextCheckingResult,我们将对象里面匹配范围打印出来,并且根据范围截取字符串 for (NSTextCheckingResult * result in array) { NSLog(@"%@",NSStringFromRange(result.range)); NSString * s=[str substringWithRange:result.range]; NSLog(@"%@",s); }
这样我们就成功的讲字符串匹配出来了。
方式二:block方式参数选项跟上面结束的第一种相同,用法如下:
[reg enumerateMatchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, [str length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { NSLog(@"%@",NSStringFromRange(result.range)); NSString * s=[str substringWithRange:result.range]; NSLog(@"%@",s); }];
方式三:我们已经现在已经可以匹配简单的字符串了,但是我们在工作中有时候需要对字符串进行分割,例如字符串hello[你好]world[大家好]good,我们需要将字符串按照中文进行分割,要是实习这个功能我们借助第三方会达到事半功倍的效果下面我们用第三方RegexKitLite来实现这个功能。
1、我们定义正则表达式
//用来匹配中文 NSString * pattern=@"\\[[\\u4E00-\\u9FA5]+\\]"; //待匹配字符串 NSString * str=@"[哈哈]hello[你好]world[吗]good";
2、将文件拖入项目
3、将该文件编译改为非arc
4、引入辅助库
5、用法比较简单,我们首先需要引入头文件,然后直接调用如下方法即可
#import "RegexKitLite.h" //用来获取分割后的字符串 [str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) { NSLog(@"%@",*capturedStrings); }]; //用来获取匹配的字符串 [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) { NSLog(@"%@",*capturedStrings); }];
然后我们就可以开心的用正则表达式编程了。。
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。