// // NSString+Regex.m // YUMI // // Created by YUMI on 2021/9/14. // #import "NSString+Utils.h" #import #import "LoginAreaModel.h" @implementation NSString (Utils) ///是否是正确的手机号 - (BOOL)isPhoneNumber{ NSString *regex =@"^((1[3-9][0-9])|(147)|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [pred evaluateWithObject:self]; } ///MD5加密 - (NSString *)MD5String { const char *cstr = [self UTF8String]; unsigned char result[16]; CC_MD5(cstr, (CC_LONG)strlen(cstr), result); return [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; } + (BOOL)versionCompareOldStr:(NSString *)first andNewStr: (NSString *)second{ if ([first compare:second options:NSNumericSearch] == NSOrderedAscending){ return NO; }else if ([first compare:second options:NSNumericSearch] == NSOrderedSame){ return YES; }else{ return YES; } } +(NSString *)getDealTenNumWithString:(NSString *)string{ if (string.floatValue < 100000) { return [NSString stringWithFormat:@"%@", string]; } NSDecimalNumber *numberA = [NSDecimalNumber decimalNumberWithString:string]; NSDecimalNumber *numberB = [NSDecimalNumber decimalNumberWithString:@"10000"]; //NSDecimalNumberBehaviors对象的创建 参数 1.RoundingMode 一个取舍枚举值 2.scale 处理范围 3.raiseOnExactness 精确出现异常是否抛出原因 4.raiseOnOverflow 上溢出是否抛出原因 4.raiseOnUnderflow 下溢出是否抛出原因 5.raiseOnDivideByZero 除以0是否抛出原因。 NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:0 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; /// 这里不仅包含Multiply还有加 减 乘。 NSDecimalNumber *numResult = [numberA decimalNumberByDividingBy:numberB withBehavior:roundingBehavior]; NSString *strResult = [numResult stringValue]; return [NSString stringWithFormat:@"%@W", strResult]; } ///数字转化为万 + (NSString *)getDealNumwithstring:(NSString *)string{ if (string.floatValue < 10000) { return [NSString stringWithFormat:@"%@", string]; } NSDecimalNumber *numberA = [NSDecimalNumber decimalNumberWithString:string]; NSDecimalNumber *numberB = [NSDecimalNumber decimalNumberWithString:@"10000"]; //NSDecimalNumberBehaviors对象的创建 参数 1.RoundingMode 一个取舍枚举值 2.scale 处理范围 3.raiseOnExactness 精确出现异常是否抛出原因 4.raiseOnOverflow 上溢出是否抛出原因 4.raiseOnUnderflow 下溢出是否抛出原因 5.raiseOnDivideByZero 除以0是否抛出原因。 NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; /// 这里不仅包含Multiply还有加 减 乘。 NSDecimalNumber *numResult = [numberA decimalNumberByDividingBy:numberB withBehavior:roundingBehavior]; NSString *strResult = [numResult stringValue]; return [NSString stringWithFormat:YMLocalizedString(@"NSString_Utils4"), strResult]; } + (NSString *)stringWithTimeStamp:(NSString *)timeStamp { // 转为秒为单位 NSTimeInterval second = timeStamp.longLongValue / 1000; NSDate *date = [NSDate dateWithTimeIntervalSince1970:second]; //把字符串转为NSdate NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // 时间 10点10分 NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init]; [timeFormatter setDateFormat:@"HH:mm"]; // 日期 2月18号 NSDateFormatter *dayFormatter = [[NSDateFormatter alloc] init]; [dayFormatter setDateFormat:YMLocalizedString(@"NSString_Utils0")]; // 日期 年月日 NSDateFormatter *yearFormatter = [[NSDateFormatter alloc] init]; [yearFormatter setDateFormat:YMLocalizedString(@"NSString_Utils1")]; //得到与当前时间差 NSTimeInterval timeInterval = [date timeIntervalSinceNow]; timeInterval = -timeInterval; long temp = 0; NSString *result; BOOL isSameDay = [[NSCalendar currentCalendar] isDateInToday:date]; // 是否是同一天 // A. 当天,且 timeInterval < 1分钟,显示“刚刚”; if (timeInterval < 60) { return [NSString stringWithFormat:@"%@", YMLocalizedString(@"NSString_Utils2")]; // B. 当天,且1分钟≤ timeInterval <60分钟,显示“n分钟前”; } else if((temp = timeInterval/60) < 60){ return [NSString stringWithFormat:YMLocalizedString(@"NSString_Utils3"),temp]; // C. 当天,且n≥60分钟,显示“xx:xx”; } else if((temp = temp/60) < 24 && isSameDay){ return [timeFormatter stringFromDate:date]; // C. 非当天,且n≥60分钟,显示“xx:xx”; } else if((temp = temp/60) < 24 && !isSameDay){ return [dayFormatter stringFromDate:date]; // D. 跨天,且未跨年,显示“mm-dd”; } else if((temp = temp/30) < 30){ return [dayFormatter stringFromDate:date]; } else { // E. 跨年,显示“yyyy-mm-dd”; return [yearFormatter stringFromDate:date]; } return result; } + (NSString *)calculateConstellationWithMonth:(long)time { NSString *astroString = YMLocalizedString(@"XPMineHeadView0"); NSString *astroFormat = @"102123444543"; NSString *result; NSInteger month = [NSString getMonth:time]; NSInteger day = [NSString getDay:time]; if (month<1 || month>12 || day<1 || day>31){ return YMLocalizedString(@"XPMineHeadView1"); } if(month==2 && day>29) { return YMLocalizedString(@"XPMineHeadView2"); }else if(month==4 || month==6 || month==9 || month==11) { if (day>30) { return YMLocalizedString(@"XPMineHeadView3"); } } result=[NSString stringWithFormat:@"%@",[astroString substringWithRange:NSMakeRange(month*2-(day < [[astroFormat substringWithRange:NSMakeRange((month-1), 1)] intValue] - (-19))*2,2)]]; return [NSString stringWithFormat:YMLocalizedString(@"XPMineHeadView6"),result]; } ///通过生日获取星座图片 + (NSString *)getCalculateConstellationImageWithMonth:(long)time{ NSString *astroString = YMLocalizedString(@"XPMineHeadView0"); NSString *astroFormat = @"102123444543"; NSString *result; NSInteger month = [self getMonth:time]; NSInteger day = [self getDay:time]; if (month<1 || month>12 || day<1 || day>31){ return @""; } if(month==2 && day>29) { return @""; }else if(month==4 || month==6 || month==9 || month==11) { if (day>30) { return @""; } } result=[NSString stringWithFormat:@"%@",[astroString substringWithRange:NSMakeRange(month*2-(day < [[astroFormat substringWithRange:NSMakeRange((month-1), 1)] intValue] - (-19))*2,2)]]; NSDictionary *starDic = @{YMLocalizedString(@"XPMineHeadView9"):@"pi_capricorn",YMLocalizedString(@"XPMineHeadView10"):@"pi_water_bottle",YMLocalizedString(@"XPMineHeadView11"):@"pi_pisces",YMLocalizedString(@"XPMineHeadView12"):@"pi_aries",YMLocalizedString(@"XPMineHeadView13"):@"pi_taurus",YMLocalizedString(@"XPMineHeadView14"):@"pi_gemini",YMLocalizedString(@"XPMineHeadView15"):@"pi_cancer",YMLocalizedString(@"XPMineHeadView16"):@"pi_lion",YMLocalizedString(@"XPMineHeadView17"):@"pi_virgin",YMLocalizedString(@"XPMineHeadView18"):@"pi_libra",YMLocalizedString(@"XPMineHeadView19"):@"pi_scorpion",YMLocalizedString(@"XPMineHeadView20"):@"pi_shooter"}; return starDic[result]; } ///通过生日获取星座 + (NSString *)getCalculateConstellationTextWithMonth:(long)time{ NSString *astroString = YMLocalizedString(@"XPMineHeadView0"); NSString *astroFormat = @"102123444543"; NSString *result; NSInteger month = [self getMonth:time]; NSInteger day = [self getDay:time]; if (month<1 || month>12 || day<1 || day>31){ return @""; } if(month==2 && day>29) { return @""; }else if(month==4 || month==6 || month==9 || month==11) { if (day>30) { return @""; } } result=[NSString stringWithFormat:@"%@",[astroString substringWithRange:NSMakeRange(month*2-(day < [[astroFormat substringWithRange:NSMakeRange((month-1), 1)] intValue] - (-19))*2,2)]]; return result; } +(NSInteger) getMonth:(long )time { NSDate *date = [NSDate dateWithTimeIntervalSince1970:time/1000]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* components = [calendar components:NSCalendarUnitMonth fromDate:date]; NSInteger month = components.month; return month; } + (NSInteger) getDay:(long) time { NSDate *date = [NSDate dateWithTimeIntervalSince1970:time/1000]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* components = [calendar components:NSCalendarUnitDay fromDate:date]; NSInteger day = components.day; return day; } +(NSString *)getAgeWithBirth:(long)birth{ NSDateComponents *components1 = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate dateWithTimeIntervalSince1970:birth/1000]]; NSInteger brithDateYear = [components1 year]; NSInteger brithDateDay = [components1 day]; NSInteger brithDateMonth = [components1 month]; // 获取系统当前 年月日 NSDateComponents *components2 = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]]; NSInteger currentDateYear = [components2 year]; NSInteger currentDateDay = [components2 day]; NSInteger currentDateMonth = [components2 month]; // 计算年龄 NSInteger iAge = currentDateYear - brithDateYear - 1; if ((currentDateMonth > brithDateMonth) || (currentDateMonth == brithDateMonth && currentDateDay >= brithDateDay)) { iAge++; } return @(iAge).stringValue; } ///得到区号 +(NSString *)getCountryCode{ // 获取文件路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"pi_area_info" ofType:@"json"]; // 将文件数据化 NSData *data = [[NSData alloc] initWithContentsOfFile:path]; // 对数据进行JSON格式化并返回字典形式 NSDictionary *codeData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; NSArray *codeList = [LoginAreaModel modelsWithArray:codeData[@"RECORDS"]]; NSString *mccCode = [YYUtility getMobileCountryCode]; NSString *countryCode = @""; if([mccCode isEqualToString:@"65535"])return @"+886"; for (LoginAreaModel *obj in codeList) { if([mccCode isEqualToString:obj.mcc]){ countryCode = obj.code; break; } } if(countryCode.length == 0)return @"+886"; return [NSString stringWithFormat:@"+%@",countryCode]; } @end