// // NSString+Regex.m // YUMI // // Created by YUMI on 2021/9/14. // #import "NSString+Utils.h" #import @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]; } +(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; } @end