- MitRegx,这个小轮子写了很长时间,感觉还算比较实用。
困扰
- 以往我们在登录注册的时候要去校验诸如账号、密码和验证码的一些格式是否正确,可能会写出如下的代码:
if (账号的格式正确&&密码的格式正确&&验证码的格式正确){
[发送网络请求进行下一步]
}
- 这样的代码看上去很难受。
函数式编程
- 那个时候用 Masonry,体会了函数式编程的好处:
- 代码简洁
- 易于理解
- 方便代码管理
MitRegx
- MitRegx 分4个部分
- MitRegx.h 头文件,便于类的导入。
- MitRegxConst.h ,这个类中存放了一些错误状态的常量。
- MitRegexMaker.h 核心逻辑处理类,在这里对通用的验证逻辑进行处理。
/** 校验状态 */
@property(nonatomic, assign)MitRegexStateType status;
/** 返回状态文本 */
@property(nonatomic, strong)NSString * statusString;
/** 是否通过了校验
当连续校验多个值的时候会使用到此值.
*/
@property(nonatomic, getter=isPassed)BOOL passed;
/** 校验手机号 */
-(MitRegexMaker * (^)(NSString * str))validatePhone;
/** 校验密码 */
-(MitRegexMaker * (^)(NSString * str))validatePsd;
/** 校验验证码 */
-(MitRegexMaker * (^)(NSString * str))validateCodeNumber;
/** 验证身份证 */
-(MitRegexMaker * (^)(NSString * str))validatePersonalId;
/** 验证 email */
-(MitRegexMaker*(^)(NSString *))validateEmail;
- NSObject+mitRegexMaker.h 初始化类扩展,提供不同返回值的初始化方式,使用者可以按需调用。
/** 获取处理类 */
+(MitRegexMaker*)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block;
/**
* 状态码 + 状态码信息 (Block)
* @param block 校验处理类
* @param mitBlock 返回状态值信息(只有当校验状态全部通过的时候, isPassed 才返回 Yes)
*/
+(void)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block MitValue:(void(^)(MitRegexStateType statusType,NSString * statusStr,BOOL isPassed))mitBlock;
/** 返回状态码 */
+(MitRegexStateType)mit_makeMitRegexStatusMaker:(void (^)(MitRegexMaker * maker))block;
/** 返回状态码所对应状态信息 */
+(NSString *)mit_makeMitRegexStatusStringMaker:(void (^)(MitRegexMaker * maker))block;
- 调用方式
/**
如果之前前面一个条件的校验未通过,将不会再进行下一个校验,返回的状态值也是未通过的校验值
只有当校验条件全部通过的时候, isPassed 才为1.
*/
[NSObject mit_makeMitRegexMaker:^(MitRegexMaker *maker) {
maker.validateCodeNumber(@"1234").validatePhone(@"15941281116").validatePsd(@"123456").validatePersonalId(@"2103021991071").validateEmail(@"41692292@roo.bo");
} MitValue:^(MitRegexStateType statusType, NSString * statusStr , BOOL isPassed) {
NSLog(@"是否通过校验 = %d 状态码 = %ld, 状态详细 = %@",isPassed,statusType,statusStr);
}];
设计的核心思路,通过
NSObject+mitRegexMaker.h
中提供的类方法完成MitRegexMaker
实例的创建,并通过代码块返回实例,接着在代码块中按需调用MitRegexMaker
的校验方法完成校验,这里每个校验方法都会返回实例本身,以便进行下一次的格式校验。更详细的代码和使用方法在 MitRegx,希望大家多提宝贵意见。