1. 程式人生 > >【ios】表單驗證工具

【ios】表單驗證工具

新建一個NSObject類,起一個工具類的名字,我的是QCTools

然後把下邊程式碼分 .h   .m  檔案粘進去,結束

本表單工具主要包括

  • 字串為空判斷
  • 判斷是否為手機號
  • 判斷時候為身份證號
  • 判斷是否為郵箱
  • 判斷是否為銀行卡號
  • 按指定分隔符拆分字串
  • 按指定分隔符拼接字串

.h檔案中定義類方法:

/*

判斷字串是否為空

 */

+(BOOL) isBlankString:(NSString *)string;

/*

 判斷是否為手機號

 */

+(BOOL)isMobileNumber:(NSString*)mobileNum;

/*

 判斷是否是身份證號

 */

+(BOOL)isIdCard:(NSString *)idCard;

/*

 判斷是否為郵箱

 */

+(BOOL)isEmail:(NSString*)email;

/*

 判斷是否為銀行卡號

 */

+(BOOL)isBankCard:(NSString *)cardNo;

/*

 陣列=>字串 按指定分隔符拼接字串

 */

+(NSString*)jointStringBaseArr:(NSMutableArray*)arr BySeparator:(NSString *)sepa;

 

/*

 字串=>陣列 按指定分隔符拆分字串

 */

+(NSArray*)splitString:(NSString *)string BySeparator:(NSString *)sepa;

 

.m檔案中方法實現

/*

 字串為空判斷

 */

 

+(BOOL) isBlankString:(NSString *)string {

    

    if (string == nil || string == NULL) {

        return YES;

    }

    

    if ([string isKindOfClass:[NSNull class]]) {

        return YES;

    }

    

    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {

        return YES;

    }

    return NO;

}

/*

 手機號判斷

 */

+(BOOL)isMobileNumber:(NSString*)mobileNum {

    

    //   電訊號段:133/153/180/181/189/177

    //   聯通號段:130/131/132/155/156/185/186/145/176

    //   移動號段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178

    //   虛擬運營商:170

    NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";

    

    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];

    

    

    return[regextestmobile evaluateWithObject:mobileNum];

}

/*

 身份證判斷

 */

+(BOOL)isIdCard:(NSString *)identityCard{

    //判斷是否為空

    if (identityCard==nil||identityCard.length <= 0) {

        return NO;

    }

    //判斷是否是18位,末尾是否是x

    NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";

    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];

    if(![identityCardPredicate evaluateWithObject:identityCard]){

        return NO;

    }

    //判斷生日是否合法

    NSRange range = NSMakeRange(6,8);

    NSString *datestr = [identityCard substringWithRange:range];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateFormat : @"yyyyMMdd"];

    if([formatter dateFromString:datestr]==nil){

        return NO;

    }

    

    //判斷校驗位

    if(identityCard.length==18)

    {

        NSArray *idCardWi= @[ @"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2" ]; //將前17位加權因子儲存在數組裡

        NSArray * [email protected][ @"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2" ]; //這是除以11後,可能產生的11位餘數、驗證碼,也儲存成陣列

        int idCardWiSum=0; //用來儲存前17位各自乖以加權因子後的總和

        for(int i=0;i<17;i++){

            idCardWiSum+=[[identityCard substringWithRange:NSMakeRange(i,1)] intValue]*[idCardWi[i] intValue];

        }

        

        int idCardMod=idCardWiSum%11;//計算出校驗碼所在陣列的位置

        NSString *idCardLast=[identityCard substringWithRange:NSMakeRange(17,1)];//得到最後一位身份證號碼

        

        //如果等於2,則說明校驗碼是10,身份證號碼最後一位應該是X

        if(idCardMod==2){

            if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]){

                return YES;

            }else{

                return NO;

            }

        }else{

            //用計算出的驗證碼與最後一位身份證號碼匹配,如果一致,說明通過,否則是無效的身份證號碼

            if([idCardLast intValue]==[idCardY[idCardMod] intValue]){

                return YES;

            }else{

                return NO;

            }

        }

    }

    return NO;

}

/*

 郵箱驗證

 */

 

+(BOOL)isEmail:(NSString *)email{

    

    NSString *regex = @"^[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";

    

    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    

    return [emailTest evaluateWithObject:email];

 

}

 

/*

 銀行卡號驗證

 */

+(BOOL)isBankCard:(NSString *)cardNo{

    

    int oddsum = 0;     //奇數求和

    int evensum = 0;    //偶數求和

    int allsum = 0;

    int cardNoLength = (int)[cardNo length];

    int lastNum = [[cardNo substringFromIndex:cardNoLength-1] intValue];

    

    cardNo = [cardNo substringToIndex:cardNoLength - 1];

    for (int i = cardNoLength -1 ; i>=1;i--) {

        NSString *tmpString = [cardNo substringWithRange:NSMakeRange(i-1, 1)];

        int tmpVal = [tmpString intValue];

        if (cardNoLength % 2 ==1 ) {

            if((i % 2) == 0){

                tmpVal *= 2;

                if(tmpVal>=10)

                    tmpVal -= 9;

                evensum += tmpVal;

            }else{

                oddsum += tmpVal;

            }

        }else{

            if((i % 2) == 1){

                tmpVal *= 2;

                if(tmpVal>=10)

                    tmpVal -= 9;

                evensum += tmpVal;

            }else{

                oddsum += tmpVal;

            }

        }

    }

    

    allsum = oddsum + evensum;

    allsum += lastNum;

    if((allsum % 10) == 0)

        return YES;

    else

        return NO;  

}

/*

 按指定分隔符拼接字串

 */

 

+(NSString *)jointStringBaseArr:(NSMutableArray *)arr BySeparator:(NSString *)sepa{

    

    int i = 0;

    NSString *selectStr = [NSString new];

    for (NSString *str in arr) {

        if (str.length == 0 || [str isEqual:@""]) {

            continue;

        }

        

        if (i == 0) {

            selectStr = [NSString stringWithFormat:@"%@",str];

        }

        

        if (i > 0) {

            selectStr = [NSString stringWithFormat:@"%@%@%@",selectStr,sepa,str];

        }

        i++;

    }

    return selectStr;

}

/*

 按指定分隔符拆分字串

 */

+(NSArray *)splitString:(NSString *)string BySeparator:(NSString *)sepa{    

    NSString *str = string;

    NSArray *arr= [str componentsSeparatedByString:sepa];

    return arr;

}

打完收工,一切為了效率