1. 程式人生 > >正則表示式 申通單號規則

正則表示式 申通單號規則

申通 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