117 lines
4.2 KiB
Objective-C
117 lines
4.2 KiB
Objective-C
//
|
||
// NSString+Regex.m
|
||
// YUMI
|
||
//
|
||
// Created by YUMI on 2021/9/14.
|
||
//
|
||
|
||
#import "NSString+Utils.h"
|
||
#import <CommonCrypto/CommonDigest.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 *)getDealNumwithstring:(NSString *)string{
|
||
if (string.floatValue <10000) {
|
||
return [NSString stringWithFormat:@"%@.0", 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_Utils0"), 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_Utils1")];
|
||
// 日期 年月日
|
||
NSDateFormatter *yearFormatter = [[NSDateFormatter alloc] init];
|
||
[yearFormatter setDateFormat:YMLocalizedString(@"NSString_Utils2")];
|
||
|
||
//得到与当前时间差
|
||
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_Utils3")];
|
||
|
||
// B. 当天,且1分钟≤ timeInterval <60分钟,显示“n分钟前”;
|
||
} else if((temp = timeInterval/60) < 60){
|
||
return [NSString stringWithFormat:YMLocalizedString(@"NSString_Utils4"),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;
|
||
}
|
||
|
||
|
||
|
||
@end
|