//獲取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];
}