正則表示式 申通單號規則
阿新 • • 發佈:2019-01-07
申通 APP專案 單號規則
其實單號規則很容易寫的 開始我也不太瞭解正則表示式 我只是看了一下安卓程式碼 然後寫了個OC版本的 一次成功
全程式碼如下 就一個CodeMatches類
#import <Foundation/Foundation.h> //單號規則 @interface CodeMatches : NSObject + (NSMutableArray *)startsWithFor12; //12位運單號 規則 + (NSMutableArray *)startsWithFor13; //13位運單號 規則 + (BOOL)matches:(NSString *)billcode;//傳入運單號 進行規則對比 是否符合單號規則 + (BOOL)matchesPackeg:(NSString *)pacCode; //傳入集包單號 進行規則對比 是否符合單號規則 + (BOOL )startWith:(NSString *)start billcode:(NSString *)billcode; //進行對比 @end
#import "CodeMatches.h" @implementation CodeMatches + (BOOL)matches:(NSString *)billcode{ if(billcode == nil){ return NO; } if (![[NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"\\d+"] evaluateWithObject:billcode] ) { return NO; } BOOL matches = NO; switch (billcode.length){ case 12:{ for(int i=0; i<[[CodeMatches startsWithFor12] count]; i++){ if([CodeMatches startWith:[CodeMatches startsWithFor12][i] billcode:billcode]){ matches = YES; break; } } break; } case 13:{ for(int i=0; i<[[CodeMatches startsWithFor13] count]; i++){ if([CodeMatches startWith:[CodeMatches startsWithFor13][i] billcode:billcode]){ matches = YES; break; } } break; } } return matches; } + (BOOL)matchesPackeg:(NSString *)pacCode{ if(pacCode == nil){ return NO; } if (![[NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"\\d+"] evaluateWithObject:pacCode] ) { return NO; } BOOL matches = NO; switch (pacCode.length){ case 12:{ if ([[pacCode substringToIndex:3] isEqualToString:@"900"]) { matches = YES; } break; } } return matches; } + (NSMutableArray *)startsWithFor12{ static NSMutableArray *array = nil; if (array == nil) { array = [NSMutableArray arrayWithObjects:@"268",@"368",@"468",@"568",@"768",@"868",@"968",@"40",@"588",@"688",@"888",@"11",@"22",@"41",@"42",@"43",@"44",@"45",@"46",@"47",@"48",@"49", nil]; } return array; } + (NSMutableArray *)startsWithFor13{ static NSMutableArray *array = nil; if (array == nil) { array = [NSMutableArray arrayWithObjects:@"33",@"55",@"45",@"660",@"661",@"662",@"663",@"664",@"665",@"666",@"667",@"669",@"77",@"880",@"881",@"882",@"883",@"884",@"885",@"886",@"887",@"889",@"99", nil]; } return array; } - (NSString *)matches{ return @"\\d+"; } + (BOOL )startWith:(NSString *)start billcode:(NSString *)billcode{ if (start.length == 2) { if([[billcode substringToIndex:2]isEqualToString:start]){ return YES; }else{ return NO; } } if (start.length == 3) { if([[billcode substringToIndex:3]isEqualToString:start]){ return YES; }else{ return NO; } } return YES; } @end