//获取document路径
+ (nullable NSString *)getDocumentPath;
{
return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
}
//写图片到本地路径(document)
+ (void)writeImage:(nullable UIImage *)image toFilePathName:(nullable NSString *)name {
if(![[NSFileManager defaultManager] fileExistsAtPath:[[self getDocumentPath] stringByAppendingString:@"/Photo"]])
{
[[NSFileManager defaultManager] createDirectoryAtPath:[[self getDocumentPath] stringByAppendingString:@"/Photo"] withIntermediateDirectories:YES attributes:nil error:nil];
}
NSLog(@"write = %@",[[self getDocumentPath] stringByAppendingFormat:@"/Photo/%@",name]);
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:[[self getDocumentPath] stringByAppendingFormat:@"/Photo/%@",name] atomically:YES];
}
//从设置的document路径下获得相关图片
+ (nullable UIImage *)getPhotoWithFileName:(nullable NSString *)fileName
{
NSString *filePath = [[self getDocumentPath] stringByAppendingFormat:@"/Photo/%@",fileName];
DLog(@"get = %@", filePath)
NSData *data = [NSData dataWithContentsOfFile:filePath];
return [UIImage imageWithData:data];
}
//将图片转化为base64字符串
+ (NSString * _Nonnull)base64StringFromImage:(UIImage * __nullable)image
{
NSString * base64Str = nil;
NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
base64Str = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
return base64Str;
}
//计算特定字体在固定宽度的高
+ (CGFloat)calculateTheHeightOfText:(NSString * _Nonnull)text width:(CGFloat)width font:(UIFont *__nullable)font
{
CGFloat height = 0.0;
CGRect rect = [text boundingRectWithSize:CGSizeMake(width, 0) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: font} context:nil];
//ceil函数,大于或者等于获得数据的最大整数
height = ceill(CGRectGetHeight(rect));
return height;
}
//裁剪图片
+ (UIImage * __nullable)cropImage:(UIImage *__nullable)image withScale:(CGFloat)scale
{
CGSize size = image.size;
CGFloat croppedWidth = 0.0;
CGFloat croppedHeight = 0.0;
CGRect rect;
if (size.height/size.width > scale) {
croppedWidth = size.width;
croppedHeight = size.width * scale;
CGFloat difference = (size.height-croppedHeight)/2;
rect = CGRectMake(0.0, difference ,croppedWidth, croppedHeight);
}
else if(size.height/size.width < scale)
{
croppedHeight = size.height;
croppedWidth = size.height / scale;
CGFloat difference = (size.width - croppedWidth) / 2.0;
rect = CGRectMake(difference, 0, croppedWidth, croppedHeight);
}
else
{
return image;
}
// Create bitmap image from original image data,
// using rectangle to specify desired crop area
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
//使用颜色创建图片
+ (UIImage * __nullable)createImageWithColor:(UIColor * __nullable)color
{
CGRect rect=CGRectMake(0,0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return theImage;
}
//过滤字符串前后的空格
+ (nullable NSString *)filterSpaceForString:(nullable NSString *)string{
return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
//过滤字符串中的空格
+ (nullable NSString *)filterSpaceInString:(nullable NSString *)string{
return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
//验证6-16位英文、字母和符号的组合(至少1种,且不能输入空格)
+ (BOOL)verifyPayPassword:(NSString * _Nonnull)string{
if (![self textHasblank:string]) {
NSString *regex = @"^[A-Za-z0-9[^A-z0-9]]{6,16}+$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([predicate evaluateWithObject:string] == YES)
{
return YES;
}
else
{
return NO;
}
}else{
return NO;
}
}
//验证6-16位英文、字母和符号的组合(至少两种,且不能输入空格)
+ (BOOL)verifyLoginPassword:(NSString * _Nonnull)string{
if (![self textHasblank:string]) {
NSString *regex = @"(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^.{6,16}$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([predicate evaluateWithObject:string] == YES)
{
return YES;
}
else
{
return NO;
}
}else{
return NO;
}
}
//验证6-16位字母、数字或下划线
+ (BOOL)verifyTheMixWithNumberCharacterAndUnderLine:(NSString * _Nonnull)string{
NSString *regex = @"^[A-Za-z0-9_]{6,16}+$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([predicate evaluateWithObject:string] == YES)
{
return YES;
}
else
{
return NO;
}
}
//验证是否为数字和字母组合
+ (BOOL)verifyTheMixWithNumberAndCharater:(NSString * _Nonnull)password
{
NSString *regex = @"^[A-Za-z0-9]+$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([predicate evaluateWithObject:password] == YES)
{
BOOL hasNum = NO;
BOOL hasChar = NO;
for(NSInteger i = 0; i < password.length; ++i)
{
char c = [password characterAtIndex:i];
if(c >= '0' && c <= '9')
{
hasNum = YES;
if(hasChar)
{
return YES;
}
continue;
}
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
{
hasChar = YES;
if (hasNum)
{
return YES;
}
continue;
}
}
return NO;
}
else
{
return NO;
}
}
/*** 功能:校验手机号码*/
+ (BOOL)validateMobile:(NSString * _Nonnull)mobileNumber{
/** * 手机号码
* 移动:134[0-8],135,136,137,138,139,147,150,151,152,157,158,159,178,182,183,184,187,188
* 联通:130,131,132,145,152,155,156,176,185,186
* 电信:133,1349,153,173,177,180,181,189
*/
NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|7[01]|8[0-9])\\d{8}$";
/** 10 * 中国移动:China Mobile 11 * 12
*/
NSString * CM = @"^1(34[0-8]|(3[5-9]|47|5[0-27-9]|78|8[2-478])\\d)\\d{7}$";
/** 15 * 中国联通:China Unicom 16 * 17
*/
NSString * CU = @"^1(3[0-2]|45|5[256]|76|8[56])\\d{8}$";
/** 20 * 中国电信:China Telecom 21 * 22
*/
NSString * CT = @"^1((33|53|73|77|8[019])[0-9]|349)\\d{7}$";
NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];
if (([regextestmobile evaluateWithObject:mobileNumber] == YES) || ([regextestcm evaluateWithObject:mobileNumber] == YES)|| ([regextestct evaluateWithObject:mobileNumber] == YES) || ([regextestcu evaluateWithObject:mobileNumber] == YES))
{
return YES;
} else {
return NO;
}
}
//邮箱校验
+ (BOOL)validateEmail:(NSString * _Nonnull)email{
NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([predicate evaluateWithObject:email] == YES)
{
return YES;
}
else
{
return NO;
}
}
//身份证校验
+ (BOOL)validateIdentificationCard:(NSString * _Nonnull)idCard{
NSString *regex = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([predicate evaluateWithObject:idCard] == YES)
{
return YES;
}
else
{
return NO;
}
}
//判断输入框中是否存在有空格
+ (BOOL)textHasblank:(NSString * _Nonnull)str
{
if ([str rangeOfString:@" "].location != NSNotFound) {
return YES;
}else{
return NO;
}
}
//属性字符串 left right
+ (NSMutableAttributedString * _Nonnull)attributeWithLeftString:(NSString *_Nonnull)leftString leftColor:(UIColor *__nullable)leftColor leftFont:(UIFont *__nullable)leftFont rightString:(NSString *_Nonnull)rightString rightColor:(UIColor *__nullable)rightColor rightFont:(UIFont *__nullable)rightFont
{
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%@",leftString,rightString]];
[str addAttribute:NSFontAttributeName value:leftFont range:NSMakeRange(0, leftString.length)];
[str addAttribute:NSFontAttributeName value:rightFont range:NSMakeRange(leftString.length, rightString.length)];
[str addAttribute:NSForegroundColorAttributeName value:leftColor range:NSMakeRange(0, leftString.length)];
[str addAttribute:NSForegroundColorAttributeName value:rightColor range:NSMakeRange(leftString.length, rightString.length)];
return str;
}
//属性字符串 left center right
+ (NSMutableAttributedString *_Nonnull)attributeWithLeftString:(NSString *_Nonnull)leftString leftColor:(UIColor *__nullable)leftColor leftFont:(UIFont *__nullable)leftFont centerString:(NSString *_Nonnull)centerString centerColor:(UIColor *__nullable)centerColor centerFont:(UIFont *__nullable)centerFont rightString:(NSString *_Nonnull)rightString rightColor:(UIColor *__nullable)rightColor rightFont:(UIFont *__nullable)rightFont
{
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%@%@",leftString,centerString,rightString]];
[str addAttribute:NSFontAttributeName value:leftFont range:NSMakeRange(0, leftString.length)];
[str addAttribute:NSFontAttributeName value:centerFont range:NSMakeRange(leftString.length, centerString.length)];
[str addAttribute:NSFontAttributeName value:rightFont range:NSMakeRange(leftString.length+ centerString.length, rightString.length)];
[str addAttribute:NSForegroundColorAttributeName value:leftColor range:NSMakeRange(0, leftString.length)];
[str addAttribute:NSForegroundColorAttributeName value:centerColor range:NSMakeRange(leftString.length, centerString.length)];
[str addAttribute:NSForegroundColorAttributeName value:rightColor range:NSMakeRange(leftString.length+ centerString.length, rightString.length)];
return str;
}
//获取当前的时间 格式 2015年01月14日 15:00
+ (nullable NSString *)dateNowDecriptionForYearMonthDayHourMinute
{
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [NSDateFormatter dateFormatterWithFormat:@"yyyy年MM月dd日 HH:mm"];
NSString *dateString = [formatter stringFromDate:date];
NSLog(@"str -- %@",dateString);
return dateString;
}
//获取当前的时间 格式 2015年01月14日 15:00:00
+ (nullable NSString *)dateNowDecriptionForYearMonthDayHourMinuteSecond
{
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [NSDateFormatter dateFormatterWithFormat:@"yyyy年MM月dd日 HH:mm:ss"];
NSString *dateString = [formatter stringFromDate:date];
NSLog(@"str -- %@",dateString);
return dateString;
}
//根据所给的分钟转化为 dd - HH - mm 格式
+(nullable NSString *)timeFormatted:(int)totalMinutes
{
int days = totalMinutes/1440; // 天数
int hours = totalMinutes%1440/60;
int minutes = totalMinutes%1440%60;
return [NSString stringWithFormat:@"%02d天 %02d小时 %02d分钟",days, hours, minutes];
}