一个可提供最便捷的方式生成正则表达式,且包含常用 ios 应用开发正则的第三方库(Objective-C)。
每当你搭建一个注册界面,并成功运行数据时,总会遇到一个问题,那就是用户名密码等表单项的验证。接下来你需要去百度查找正则表达式,了解 oc 如何实现正则验证,然后进行亲自测试等等。有时一个简单的表单验证可能会花费比你搭建界面和网络数据处理更多的时间。如果你有同感,那么这个库将会为你提供极大的便利。在使用本库的过程中,你可能会觉得它的使用方式类似于代码约束库 "masonry"。是的,本库就是模仿了 masonry 的编码方式,因为我们的目标都是将复杂繁琐变为简单易用。
用最简单的方式来实现正则验证。
1、EasyRegex 分为两部分,第二部分封装了一些常用的正则,你可以直接通过类方法来使用,有些是通用的,比如电话号码验证,身份证验证等等。你只需要调用类方法即可。
例1:校验用户名和密码是否符合由字母数字下划线组成,字母开头,总长度6-16位。
NSString *username = @"asdf1234_";
BOOL result = [ERManager isUsernameOrPassword:username];
例2:校验手机号码
NSString *cellphoneNum =@"18612344213";
BOOL result = [ERManager isCellPhoneNumber:cellphoneNum];
2、EasyRegex 第二部分通过 block 方式生成正则。
ERManager 类不仅包含了很多常用的正则验证类方法,同时,它还可以用来使用 block 方式来创建正则。
就像这样: NSString *regexStr = [ERManager makeRegex:^(ERMaker *regex) {
regex.begin.is(ERLetter);
regex.addRule.is(ERNumberLetterAndUnderLine).lengthRange(5,15);
regex.endAsLastRule();
}];
有了正则表达式后,你还可以通过 ERManager 的判断方法来判断所传字符串是否匹配你所编写的正则表达式。
BOOL result = [ERManager isMatched:userNameOrPassword regex:regexStr];
这样你就生成了一个用来校验用户名或密码的正则表达式,它的规则是字母开头,由字母数字下划线组成,长度在6-16个字符之间。
下面,我们来分析下这个代码。
//下面这句话的意思是调用 ERManager 的创建正则方法,来获取正则制造器,就是获取 regex 对象。 NSString *regexStr = [ERManager makeRegex:^(ERMaker *regex) {
//下面这句话的意思是对正则头部进行约束,约束他只能匹配数字,且匹配数量为1,也就是说正则的头部必须是一个字母。 regex.begin.is(ERLetter);
//下面这句话的意思是对正则中部进行约束(正则可以有很多中部,但只能有一个头部和尾部), 约束他只能匹配字母数字下划线,且匹配数量为5到15之间,第一个字母后必须是字母数字下划线,必须在5到15个字符之间。 regex.addRule.is(ERNumberLetterAndUnderLine).lengthRange(5,15)
;
//下面这句话的意思是对正则尾部进行约束,以上一个规则结束,正则的结尾必须是前一个正则约束的类型,也就是字母数字下划线结尾 regex.endAsLastRule();
首先,先看 demo!如果对上述描述不是太懂的话,建议可以在 ERManager 中找到自带的正则验证方法进行修改。比如 ERManager 中提供的用户名密码验证是,由字母数字下划线组成,字母开头,长度6到16位。而你的需求是开头没有限制,由字母数字下划线组成,长度8到18位。那么你可以将用户名密码验证的正则 block 复制出来进行修改。
例:
修改前
NSString *regexStr = [ERManager makeRegex:^(ERMaker *regex) {
regex.begin.is(ERLetter);
regex.addRule.is(ERNumberLetterAndUnderLine).lengthRange(5,15);
regex.endAsLastRule();
}];
修改后
NSString *regexStr = [ERManager makeRegex:^(ERMaker *regex) {
regex.addRule.is(ERNumberLetterAndUnderLine).lengthRange(8,18);
regex.endAsLastRule();
}];
如果还有不明白的地方,可以加 qq 群:574566866 咨询。