234 lines
10 KiB
Objective-C
234 lines
10 KiB
Objective-C
//
|
||
// NSString+Regex.m
|
||
// YUMI
|
||
//
|
||
// Created by YUMI on 2021/9/14.
|
||
//
|
||
|
||
#import "NSString+Utils.h"
|
||
#import <CommonCrypto/CommonDigest.h>
|
||
#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];
|
||
}
|
||
+(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
|