IOS經常使用正則表達式判斷

//校驗密碼
+(BOOL)checkPass:(NSString*)pass
{
    if(pass==nil)
    {
        return NO;
    }
    NSString *regex = @"^[A-Za-z0-9]+$";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@ AND SELF.length > 5 AND SELF.length < 17", regex];
    return [predicate evaluateWithObject:pass];
}
//校驗電話號碼
+(BOOL)checkIsPhone:(NSString*)str
{
    
    NSString *regex = @"(13[0-9]|14[57]|15[0123456789]|18[023456789])\\d{8}";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    return [predicate evaluateWithObject:str];

}
//校驗是不是數字
+(BOOL)checkIsNumber:(NSString*)str
{
    if(str==nil)
    {
        return NO;
    }
    NSString *regex = @"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$";//@"^[0-9]+$";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@ ", regex];
    return [predicate evaluateWithObject:str];
}


//身份證號
+ (BOOL)CheckIsIdentityCard: (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 * idCardY=@[ @"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;
}
相關文章
相關標籤/搜索