- MitRegx擦秽,這個小輪子寫了很長時間秧均,感覺還算比較實用。
困擾
- 以往我們在登錄注冊的時候要去校驗諸如賬號、密碼和驗證碼的一些格式是否正確链快,可能會寫出如下的代碼:
if (賬號的格式正確&&密碼的格式正確&&驗證碼的格式正確){
[發(fā)送網(wǎng)絡(luò)請求進(jìn)行下一步]
}
- 這樣的代碼看上去很難受。
函數(shù)式編程
- 那個時候用 Masonry巨双,體會了函數(shù)式編程的好處:
- 代碼簡潔
- 易于理解
- 方便代碼管理
MitRegx
- MitRegx 分4個部分
- MitRegx.h 頭文件霉祸,便于類的導(dǎo)入。
- MitRegxConst.h 丝蹭,這個類中存放了一些錯誤狀態(tài)的常量。
- MitRegexMaker.h 核心邏輯處理類镜沽,在這里對通用的驗證邏輯進(jìn)行處理贱田。
/** 校驗狀態(tài) */
@property(nonatomic, assign)MitRegexStateType status;
/** 返回狀態(tài)文本 */
@property(nonatomic, strong)NSString * statusString;
/** 是否通過了校驗
當(dāng)連續(xù)校驗多個值的時候會使用到此值.
*/
@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 初始化類擴展,提供不同返回值的初始化方式男摧,使用者可以按需調(diào)用。
/** 獲取處理類 */
+(MitRegexMaker*)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block;
/**
* 狀態(tài)碼 + 狀態(tài)碼信息 (Block)
* @param block 校驗處理類
* @param mitBlock 返回狀態(tài)值信息(只有當(dāng)校驗狀態(tài)全部通過的時候, isPassed 才返回 Yes)
*/
+(void)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block MitValue:(void(^)(MitRegexStateType statusType,NSString * statusStr,BOOL isPassed))mitBlock;
/** 返回狀態(tài)碼 */
+(MitRegexStateType)mit_makeMitRegexStatusMaker:(void (^)(MitRegexMaker * maker))block;
/** 返回狀態(tài)碼所對應(yīng)狀態(tài)信息 */
+(NSString *)mit_makeMitRegexStatusStringMaker:(void (^)(MitRegexMaker * maker))block;
- 調(diào)用方式
/**
如果之前前面一個條件的校驗未通過,將不會再進(jìn)行下一個校驗,返回的狀態(tài)值也是未通過的校驗值
只有當(dāng)校驗條件全部通過的時候, 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 狀態(tài)碼 = %ld, 狀態(tài)詳細(xì) = %@",isPassed,statusType,statusStr);
}];
設(shè)計的核心思路,通過
NSObject+mitRegexMaker.h
中提供的類方法完成MitRegexMaker
實例的創(chuàng)建帆离,并通過代碼塊返回實例,接著在代碼塊中按需調(diào)用MitRegexMaker
的校驗方法完成校驗哥谷,這里每個校驗方法都會返回實例本身,以便進(jìn)行下一次的格式校驗猜扮。更詳細(xì)的代碼和使用方法在 MitRegx监婶,希望大家多提寶貴意見齿桃。