ios - 工具类
这几天看项目,把俺旁边小哥哥的一个工具类相中了,希望对大家有所帮助哦~~~~~~~~~
1 // 2 // PLZ_Tool.h 3 // 4 // 5 // Created by penglaizhi on 2017/7/3. 6 // Copyright © 2017年 yst-fll. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import <ifaddrs.h> 11 #import <arpa/inet.h> 12 #import <net/if.h> 13 14 #define IOS_CELLULAR @"pdp_ip0" 15 #define IOS_WIFI @"en0" 16 #define IOS_VPN @"utun0" 17 #define IP_ADDR_IPv4 @"ipv4" 18 #define IP_ADDR_IPv6 @"ipv6" 19 20 typedef void(^SuccessBlock)(id _Nullable data); 21 typedef void(^FailBlock)(NSError * _Nullable error); 22 23 @interface PLZ_Tool : NSObject 24 /** 25 * 使用该函数计算时间戳 26 * parameters : 不传参 27 */ 28 29 //+ (NSString*)getTimeDate:(NSString*)time_ format:(NSString*)format_; 30 31 /** 32 * 使用该函数添加提示框下 33 * parameters : 不传参 34 */ 35 //+(void)showMessage:(NSString *)message; 36 // 37 ///** 38 // * 使用该函数添加提示框上 39 // * parameters : 不传参 40 // */ 41 //+(void)showMessageUp:(NSString *)message; 42 43 /** 44 * 使用该函数添加提示框上 45 * parameters : 不传参 46 */ 47 + (void)sendGETWithUrl:(NSString *_Nullable)url parameters:(NSDictionary *_Nullable)dict success:(SuccessBlock _Nullable )successBlock fail:(FailBlock _Nullable )failBlock; 48 49 50 + (void)sendPOSTWithUrl:(NSString *_Nullable)url parameters:(NSDictionary *_Nullable)dict success:(SuccessBlock _Nullable )successBlock fail:(FailBlock _Nullable )failBlock :(BOOL)isNeed; 51 52 /** 53 * 判断是否有网 54 * parameters : 不传参 55 */ 56 57 //+ (BOOL)isCheckNetwork; 58 59 60 /* 61 62 * 63 *color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式 64 65 */ 66 + (UIColor *_Nullable)colorWithHexString:(NSString *_Nullable)color; 67 68 /* 69 70 * 71 *color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式 72 73 */ 74 + (UIColor *_Nullable)colorWithHexString:(NSString *_Nullable)color alpha:(CGFloat)alpha; 75 76 + (NSString *_Nullable)filterEmoji:(NSString *_Nullable)string; 77 78 + (NSMutableAttributedString *_Nullable)String:(NSString *_Nullable)String RangeString:(NSString *_Nullable)RangeString;//富文本 79 80 +(void)p_makeupDataForDidLoad:(NSMutableArray *_Nullable)arr; 81 82 + (NSMutableAttributedString *_Nullable)String2:(NSString *_Nullable)String RangeString:(NSString *_Nullable)RangeString colorString:(NSString *_Nullable)colorString Size:(CGFloat)size; 83 //邮箱正则 84 + (BOOL) validateEmail:(NSString *_Nullable)email; 85 + (BOOL) validateMobile:(NSString *_Nullable)mobileNum; 86 + (NSInteger)getNowTimestamp; 87 + (NSMutableAttributedString *_Nullable)String:(NSString *_Nullable)String SetRangeString:(NSString *_Nullable)RangeString setColor:(UIColor *_Nullable)Color SetFont:(UIFont *_Nullable)Font; 88 //毫秒转成date 89 + (NSString *_Nullable)ConvertStrToTime:(NSString *_Nullable)timeStr; 90 91 //字符串判空 92 +(NSInteger)GetContentBackStyleToString:(NSString *_Nullable)string; 93 94 //过滤表情 95 + (BOOL)stringContainsEmoji:(NSString *_Nullable)string; 96 -(void)textFiledEditChangedN:(UITextField *_Nullable)field lenth:(CGFloat)lenth; 97 98 -(void)textViewEditChangedN:(UITextView *_Nullable)textView lenth:(CGFloat)lenth; 99 100 //获取ip地址 101 + (NSString *_Nullable)getIPAddress:(BOOL)preferIPv4; 102 + (NSString *_Nullable)deviceIPAdress; 103 + (BOOL)isMobileNumber:(NSString *_Nullable)mobileNum; 104 105 +(NSString *)stringAddStarsWithString:(NSString *_Nullable)string; 106 107 //生成二维码 108 //+ (UIImage *)creatNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat)size; 109 +(NSString *)countdownStartTime:(NSString *)startTime; 110 @end
1 // 2 // PLZ_Tool.m 3 // 4 // 5 // Created by penglaizhi on 2017/7/3. 6 // Copyright © 2017年 yst-fll. All rights reserved. 7 // 8 9 #import "PLZ_Tool.h" 10 #import "AppDelegate.h" 11 12 @implementation PLZ_Tool 13 /** 14 * 使用该函数计算时间戳 15 * parameters : 不传参 16 */ 17 18 //+(void)showMessage:(NSString *)message 19 //{ 20 // UIWindow * window = [UIApplication sharedApplication].keyWindow; 21 // __block UIView *showview = [[UIView alloc]init]; 22 // showview.backgroundColor = [UIColor blackColor]; 23 // showview.frame = CGRectMake(1, 1, 1, 1); 24 // showview.alpha = 1.0f; 25 // showview.layer.cornerRadius = 5.0f; 26 // showview.layer.masksToBounds = YES; 27 // [window addSubview:showview]; 28 // 29 // UILabel *label = [[UILabel alloc]init]; 30 // 31 // NSDictionary *attribute = @{NSFontAttributeName:[UIFont systemFontOfSize:17]}; 32 // 33 // CGSize LabelSize = [message boundingRectWithSize:CGSizeMake(290, 9000) 34 // options: NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading 35 // attributes:attribute context:nil].size; 36 // 37 // label.frame = CGRectMake(10, 5, LabelSize.width, LabelSize.height); 38 // label.text = message; 39 // label.textColor = [UIColor whiteColor]; 40 // label.textAlignment = 1; 41 // label.backgroundColor = [UIColor clearColor]; 42 // label.font = [UIFont boldSystemFontOfSize:15]; 43 // [showview addSubview:label]; 44 // showview.frame = CGRectMake((kScreenWidth - LabelSize.width - 20)/2, kScreenHeight - 100, LabelSize.width+20, LabelSize.height+10); 45 // [UIView animateWithDuration:2.5 animations:^{ 46 // showview.alpha = 0; 47 // } completion:^(BOOL finished) { 48 // [showview removeFromSuperview]; 49 // showview = nil; 50 // }]; 51 //} 52 // 53 //+(void)showMessageUp:(NSString *)message 54 //{ 55 // UIWindow * window = [UIApplication sharedApplication].keyWindow; 56 // UIView *showview = [[UIView alloc]init]; 57 // showview.backgroundColor = [UIColor blackColor]; 58 // showview.frame = CGRectMake(1, 1, 1, 1); 59 // showview.alpha = 1.0f; 60 // showview.layer.cornerRadius = 5.0f; 61 // showview.layer.masksToBounds = YES; 62 // [window addSubview:showview]; 63 // 64 // UILabel *label = [[UILabel alloc]init]; 65 // NSDictionary *attribute = @{NSFontAttributeName:[UIFont systemFontOfSize:17]}; 66 // 67 // CGSize LabelSize = [message boundingRectWithSize:CGSizeMake(290, 9000) 68 // options: NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading 69 // attributes:attribute context:nil].size; 70 // label.frame = CGRectMake(10, 5, LabelSize.width, LabelSize.height); 71 // label.text = message; 72 // label.textColor = [UIColor whiteColor]; 73 // label.textAlignment = 1; 74 // label.backgroundColor = [UIColor clearColor]; 75 // label.font = [UIFont boldSystemFontOfSize:15]; 76 // [showview addSubview:label]; 77 // showview.frame = CGRectMake((kScreenWidth - LabelSize.width - 20)/2, 100, LabelSize.width+20, LabelSize.height+10); 78 // [UIView animateWithDuration:2.5 animations:^{ 79 // showview.alpha = 0; 80 // } completion:^(BOOL finished) { 81 // [showview removeFromSuperview]; 82 // }]; 83 //} 84 85 //网络请求数据 86 +(void)sendPOSTWithUrl:(NSString *)url parameters:(NSDictionary *)dict success:(SuccessBlock)successBlock fail:(FailBlock)failBlock :(BOOL)isNeed 87 { 88 if (isNeed) { 89 [JHHJView showLoadingOnTheKeyWindowWithType:JQXLoading]; 90 91 } 92 // if ([NetworkTool getNetworkStatus] == NotReachable) { 93 //// UIViewController *VC = [LFYCommonTool getCurrentVC]; 94 //// [ALToastView toastInView:VC.view withText:@"网络无法连接,请稍后再试"]; 95 // }else{ 96 //加签方法 97 // NSString *url1 = [url substringFromIndex:26];//本地 98 // NSString *url1 = [url substringFromIndex:27];//测试 99 NSMutableDictionary * dic = [EncryptTool encryptParamter:dict withUrl:url]; 100 101 NSString *url1 = [url substringFromIndex:28];//正式 102 // dict = [YSTFileManageTool encryptChangeDic2:dict AndUrl:url1]; 103 AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 104 AFHTTPSessionManager *manager = [app sharedHTTPSession]; 105 106 107 // AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 108 109 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 110 manager.requestSerializer.timeoutInterval = 10; 111 112 // if (kTOKEN) { 113 // [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",kTOKEN] forHTTPHeaderField:@"Authorization"]; 114 // } 115 // NSLog(@"%@------==-----%@0-0%@--9%@",kTOKEN,url1,url,dict); 116 117 manager.requestSerializer.timeoutInterval = 10; 118 // manager.responseSerializer=[AFJSONResponseSerializer serializer]; 119 // manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/xml",@"text/html",@"text/xml",@"text/plain",@"application/json",nil]; 120 manager.responseSerializer=[AFHTTPResponseSerializer serializer]; 121 NSLog(@"%@",url); 122 // NSDictionary *Dic = [EncryptTool encryptParamter:dict withUrl:url]; 123 [manager POST:url parameters:dic success:^(NSURLSessionDataTask *task, id responseObject) { 124 125 [JHHJView hideLoading]; 126 NSDictionary *dic_ = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]; 127 successBlock(dic_); 128 NSLog(@"QJGlobalAFN>>dic = %@",dic_); 129 // [NSObject creatPropertyCodeWithDictionary:dic_]; 130 131 } failure:^(NSURLSessionDataTask *task, NSError *error) { 132 [JHHJView hideLoading]; 133 failBlock(error); 134 NSLog(@"QJGlobalAFN>>error = %@",error); 135 // [JHHJView hideLoading]; 136 137 }]; 138 139 // } 140 141 142 143 // AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 144 // //申明返回的是JSON数据 145 // manager.responseSerializer = [AFJSONResponseSerializer serializer]; 146 // //申明请求的数据是json类型 147 // // manager.requestSerializer=[AFJSONRequestSerializer serializer]; 148 // //如果报接受类型不一致请替换一致text/html/plain或别的 149 // manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; 150 // manager.requestSerializer.timeoutInterval = 10.0;//超时 151 // 152 // 153 // [manager POST:url parameters:dict 154 // 155 // success:^(AFHTTPRequestOperation *operation,NSDictionary * responseObject) { 156 // 157 // successBlock(responseObject); 158 // }failure:^(AFHTTPRequestOperation *operation,NSError *error) { 159 // 160 // failBlock(error); 161 // }]; 162 163 } 164 165 //网络请求数据 166 + (void)sendGETWithUrl:(NSString *)url parameters:(NSDictionary *)dict success:(SuccessBlock)successBlock fail:(FailBlock)failBlock 167 { 168 [JHHJView showLoadingOnTheKeyWindowWithType:JQXLoading]; 169 AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 170 AFHTTPSessionManager *manager = [app sharedHTTPSession]; 171 // NSString *url1 = [url substringFromIndex:27];//测试 172 NSString *url1 = [url substringFromIndex:28];//正式 173 // NSString *url1 = [url substringFromIndex:26];//本地 174 175 // dict = [YSTFileManageTool encryptChangeDic2:dict AndUrl:url1]; 176 177 // NSLog(@"%@^^^^^^^^^^",dict); 178 179 // manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 180 // [manager.requestSerializer setValue:[NSString stringWithFormat:@"YTX-C;ios %@;%@;v%@",[UIDevice systemVersion],CUREENRBUILD,CUREENRVERSION] forHTTPHeaderField:@"User-Agent"]; 181 182 // if (kTOKEN) { 183 // [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",kTOKEN] forHTTPHeaderField:@"Authorization"]; 184 // } 185 manager.requestSerializer.timeoutInterval = 15; 186 187 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/xml",@"text/html",@"text/xml",@"text/plain",@"application/json",nil]; 188 189 manager.responseSerializer=[AFHTTPResponseSerializer serializer]; 190 191 192 [manager GET:url parameters:dict success:^(NSURLSessionDataTask *task, id responseObject) { 193 [JHHJView hideLoading]; 194 NSDictionary *dic_ = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]; 195 successBlock(dic_); 196 NSLog(@"🍉%@",dic_); 197 198 } failure:^(NSURLSessionDataTask *task, NSError *error) { 199 failBlock(error); 200 [JHHJView hideLoading]; 201 NSLog(@"QJGlobalAFN>>error = %@",error); 202 // [JHHJView hideLoading]; 203 204 }]; 205 } 206 207 /** 208 * 判断是否有网 209 * parameters : 不传参 210 */ 211 212 //+ (BOOL)isCheckNetwork{ 213 // 214 // JQXReachability *Reacha_ = [JQXReachability reachabilityWithHostName:REACHABILNETWORK]; 215 // NetworkStatus netStatus_ = [Reacha_ currentReachabilityStatus]; 216 // 217 // switch (netStatus_) { 218 // case NotReachable: 219 // return FALSE; 220 // break; 221 // case ReachableViaWWAN: 222 // return TRUE; 223 // break; 224 // case ReachableViaWiFi: 225 // return TRUE; 226 // default: 227 // return FALSE; 228 // break; 229 // } 230 // 231 // return FALSE; 232 233 //使用 234 // // 判断是否连接网络 235 // if (![QJGlobalControl isCheckNetwork]) { 236 // 237 // [self showHUD:@"您的网络好像有问题"]; //如果没有连接到网络 238 // return; 239 // } 240 //} 241 /* 242 243 * 244 *color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式 245 246 */ 247 + (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha 248 { 249 //删除字符串中的空格 250 NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 251 // String should be 6 or 8 characters 252 if ([cString length] < 6) 253 { 254 return [UIColor clearColor]; 255 } 256 // strip 0X if it appears 257 //如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾 258 if ([cString hasPrefix:@"0X"]) 259 { 260 cString = [cString substringFromIndex:2]; 261 } 262 //如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾 263 if ([cString hasPrefix:@"#"]) 264 { 265 cString = [cString substringFromIndex:1]; 266 } 267 if ([cString length] != 6) 268 { 269 return [UIColor clearColor]; 270 } 271 272 // Separate into r, g, b substrings 273 NSRange range; 274 range.location = 0; 275 range.length = 2; 276 //r 277 NSString *rString = [cString substringWithRange:range]; 278 //g 279 range.location = 2; 280 NSString *gString = [cString substringWithRange:range]; 281 //b 282 range.location = 4; 283 NSString *bString = [cString substringWithRange:range]; 284 285 // Scan values 286 unsigned int r, g, b; 287 [[NSScanner scannerWithString:rString] scanHexInt:&r]; 288 [[NSScanner scannerWithString:gString] scanHexInt:&g]; 289 [[NSScanner scannerWithString:bString] scanHexInt:&b]; 290 return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha]; 291 } 292 293 /* 294 295 * 296 *color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式 297 298 */ 299 + (UIColor *)colorWithHexString:(NSString *)color 300 { 301 return [self colorWithHexString:color alpha:1.0f]; 302 } 303 //过滤表情 304 + (NSString *)filterEmoji:(NSString *)string { 305 NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 306 const char *utf8 = [string UTF8String]; 307 char *newUTF8 = malloc( sizeof(char) * len ); 308 int j = 0; 309 310 //0xF0(4) 0xE2(3) 0xE3(3) 0xC2(2) 0x30---0x39(4) 311 for ( int i = 0; i < len; i++ ) { 312 unsigned int c = utf8; 313 BOOL isControlChar = NO; 314 if ( c == 4294967280 || 315 c == 4294967089 || 316 c == 4294967090 || 317 c == 4294967091 || 318 c == 4294967092 || 319 c == 4294967093 || 320 c == 4294967094 || 321 c == 4294967095 || 322 c == 4294967096 || 323 c == 4294967097 || 324 c == 4294967088 ) { 325 i = i + 3; 326 isControlChar = YES; 327 } 328 if ( c == 4294967266 || c == 4294967267 ) { 329 i = i + 2; 330 isControlChar = YES; 331 } 332 if ( c == 4294967234 ) { 333 i = i + 1; 334 isControlChar = YES; 335 } 336 if ( !isControlChar ) { 337 newUTF8[j] = utf8; 338 j++; 339 } 340 } 341 newUTF8[j] = '\0'; 342 NSString *encrypted = [NSString stringWithCString:(const char*)newUTF8 343 encoding:NSUTF8StringEncoding]; 344 free( newUTF8 ); 345 return encrypted; 346 } 347 #pragma mark - 富文本实现 348 + (NSMutableAttributedString *)String:(NSString *)String RangeString:(NSString *)RangeString 349 { 350 NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:String]; 351 //获取要调整颜色的文字位置,调整颜色 352 NSRange range1=[[hintString string] rangeOfString:RangeString]; 353 354 [hintString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range1]; 355 356 return hintString; 357 } 358 //新添加富文本 359 + (NSMutableAttributedString *)String2:(NSString *)String RangeString:(NSString *)RangeString colorString:(NSString *)colorString Size:(CGFloat)size 360 { 361 NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:String]; 362 //获取要调整颜色的文字位置,调整颜色 363 NSRange range1=[[hintString string] rangeOfString:RangeString]; 364 365 NSDictionary *attributeDict = [NSDictionary dictionaryWithObjectsAndKeys: 366 [UIFont fontWithName:@"Helvetica" size:size],NSFontAttributeName, 367 [UIColor ColorWithString:colorString],NSForegroundColorAttributeName 368 ,nil]; 369 // NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀" attributes:attributeDict]; 370 371 [hintString addAttributes:attributeDict range:range1]; 372 373 return hintString; 374 } 375 376 // 377 //邮箱 378 + (BOOL) validateEmail:(NSString *)email 379 { 380 381 // NSString *regex = @"^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; 382 // 383 // NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 384 // 385 // return [emailTest evaluateWithObject:email]; 386 387 NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 388 NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 389 return [emailTest evaluateWithObject:email]; 390 } 391 //-(BOOL)isValidateEmail:(NSString *)email 392 //{ 393 // NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 394 // NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 395 // return [emailTest evaluateWithObject:email]; 396 //} 397 //+ (BOOL)checkEmail:(NSString *)email{ 398 // 399 // //^(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w{2,3}){1,3})$ 400 // 401 // 402 //} 403 404 405 406 //手机号码验证 407 + (BOOL) validateMobile:(NSString *)mobileNum 408 { 409 NSString *str1 = [mobileNum substringToIndex:0]; 410 NSLog(@"===stri&%@",str1); 411 412 if (mobileNum.length==11&&[str1 isEqualToString:@"1"]) { 413 return 1; 414 }else{ 415 return 0; 416 } 417 // NSLog(@"mobile = %@",mobileNum); 418 // 419 // /** 420 // 421 // * 手机号码 422 // 423 // * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 424 // 425 // * 联通:130,131,132,152,155,156,185,186 426 // 427 // * 电信:133,1349,153,180,189 428 // 429 // */ 430 // 431 // NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$"; 432 // 433 // /** 434 // 435 // * 中国移动:China Mobile 436 // 437 // * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 438 // 439 // */ 440 // 441 // NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$"; 442 // 443 // /** 444 // 445 // * 中国联通:China Unicom 446 // 447 // * 130,131,132,152,155,156,185,186 448 // 449 // */ 450 // 451 // NSString * CU = @"^1(3[0-2]|5[2567]|7[0-9]|8[56])\\d{8}$"; 452 // 453 // /** 454 // 455 // * 中国电信:China Telecom 456 // 457 // * 133,1349,153,180,189 458 // 459 // */ 460 // 461 // NSString * CT = @"^1((33|53|8[09])[0-9]|349)\\d{7}$"; 462 // 463 // /** 464 // 465 // *大陆地区固话及小灵通 466 // 467 // * 区号:010,020,021,022,023,024,025,027,028,029 468 // 469 // *号码:七位或八位 470 // 471 // */ 472 // 473 // NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$"; 474 // 475 // 476 // 477 // NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE]; 478 // 479 // NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM]; 480 // 481 // NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU]; 482 // 483 // NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT]; 484 // 485 // NSPredicate *regextestPHS = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", PHS]; 486 // 487 // 488 // 489 // if (([regextestmobile evaluateWithObject:mobileNum] == YES) 490 // 491 // || ([regextestcm evaluateWithObject:mobileNum] == YES) 492 // 493 // || ([regextestct evaluateWithObject:mobileNum] == YES) 494 // 495 // || ([regextestPHS evaluateWithObject:mobileNum] == YES) 496 // 497 // || ([regextestcu evaluateWithObject:mobileNum] == YES)) 498 // 499 // { 500 // 501 // return YES; 502 // 503 // } 504 // 505 // else 506 // 507 // { 508 // return NO; 509 // 510 // } 511 512 513 // //手机号以13, 15,18开头,八个 \d 数字字符 514 // NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$"; 515 // NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex]; 516 // return [phoneTest evaluateWithObject:mobile]; 517 } 518 519 #pragma mark - 获取当前时间的 时间戳 520 + (NSInteger)getNowTimestamp{ 521 522 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 523 524 [formatter setDateStyle:NSDateFormatterMediumStyle]; 525 526 [formatter setTimeStyle:NSDateFormatterShortStyle]; 527 528 [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; 529 530 NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"]; 531 532 [formatter setTimeZone:timeZone]; 533 534 NSDate *datenow = [NSDate date]; 535 536 NSInteger timeSp = [[NSNumber numberWithDouble:[datenow timeIntervalSince1970]] integerValue]; 537 538 return timeSp; 539 540 } 541 #pragma 实现富文本 542 + (NSMutableAttributedString *_Nullable)String:(NSString *_Nullable)String SetRangeString:(NSString *_Nullable)RangeString setColor:(UIColor *_Nullable)Color SetFont:(UIFont *_Nullable)Font{ 543 544 NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:String]; 545 //获取要调整颜色的文字位置,调整颜色 546 NSRange range1=[[hintString string]rangeOfString:RangeString]; 547 [hintString addAttribute:NSForegroundColorAttributeName value:Color range:range1]; 548 [hintString addAttribute:NSFontAttributeName value:Font range:range1]; 549 return hintString; 550 551 } 552 //将毫秒值转成date 553 + (NSString *)ConvertStrToTime:(NSString *)timeStr 554 555 { 556 557 long long time=[timeStr longLongValue]; 558 559 NSDate *d = [[NSDate alloc]initWithTimeIntervalSince1970:time/1000.0]; 560 561 NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 562 563 [formatter setDateFormat:@"yyyy-MM-dd HH:mm"]; 564 565 NSString *timeString=[formatter stringFromDate:d]; 566 // if ([timeString isEqualToString:@"1970-01-01 08:00"]) { 567 // return @"暂无服务时间"; 568 // } 569 return timeString; 570 571 } 572 +(NSInteger)GetContentBackStyleToString:(NSString *)string 573 { 574 if ([string isEqualToString:@"(null)"]||[string isEqualToString:@"<null>"]||string== nil||string== NULL||[string isEqualToString:@""]) { 575 return 0; 576 }else{ 577 return 1; 578 } 579 } 580 + (BOOL)stringContainsEmoji:(NSString *)string 581 { 582 __block BOOL returnValue =NO; 583 [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 584 const unichar hs = [substring characterAtIndex:0]; 585 // surrogate pair 586 if (0xd800) { 587 if (0xd800 <= hs && hs <= 0xdbff) { 588 if (substring.length > 1) { 589 const unichar ls = [substring characterAtIndex:1]; 590 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; 591 if (0x1d000 <= uc && uc <= 0x1f77f) { 592 returnValue =YES; 593 } 594 } 595 }else if (substring.length > 1) { 596 const unichar ls = [substring characterAtIndex:1]; 597 if (ls == 0x20e3) { 598 returnValue =YES; 599 } 600 }else { 601 // non surrogate 602 //限制的是拼音 603 // if (0x2100 <= hs && hs <= 0x27ff) { 604 // returnValue =YES; 605 // }else 606 if (0x2B05 <= hs && hs <= 0x2b07) { 607 returnValue =YES; 608 }else if (0x2934 <= hs && hs <= 0x2935) { 609 returnValue =YES; 610 }else if (0x3297 <= hs && hs <= 0x3299) { 611 returnValue =YES; 612 }else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) { 613 returnValue =YES; 614 } 615 } 616 } 617 }]; 618 return returnValue; 619 } 620 621 -(void)textFiledEditChangedN:(UITextField *)field lenth:(CGFloat)lenth{ 622 623 NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:0 error:nil]; 624 625 NSString *noEmojiStr = [regularExpression stringByReplacingMatchesInString:field.text options:0 range:NSMakeRange(0, field.text.length) withTemplate:@""]; 626 627 if (![noEmojiStr isEqualToString:field.text]) { 628 field.text = noEmojiStr; 629 } 630 @try{ 631 632 UITextField *textField = field; 633 NSString *str = [[textField text] stringByReplacingOccurrencesOfString:@"?" withString:@""]; 634 NSLog(@"str--%@",str); 635 UITextRange *selectedRange = [textField markedTextRange]; 636 UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0]; 637 638 if (!position) { 639 CGFloat ascLen=[self countW:str :lenth]; 640 NSLog(@"ascLen------------------%f",ascLen); 641 if (ascLen > 6) { 642 NSString *strNew = [NSString stringWithString:str]; 643 NSLog(@"strNew--%@",strNew); 644 NSLog(@"_subLen%f",lenth); 645 if (lenth==0) { 646 lenth=strNew.length; 647 } 648 [textField setText:[strNew substringToIndex:lenth]]; 649 } 650 } 651 else{ 652 } 653 } 654 @catch(NSException *exception) { 655 NSLog(@"exception:%@", exception); 656 } 657 @finally { 658 659 } 660 } 661 -(void)textViewEditChangedN:(UITextView *)textView lenth:(CGFloat)lenth{ 662 663 NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:0 error:nil]; 664 665 NSString *noEmojiStr = [regularExpression stringByReplacingMatchesInString:textView.text options:0 range:NSMakeRange(0, textView.text.length) withTemplate:@""]; 666 667 if (![noEmojiStr isEqualToString:textView.text]) { 668 textView.text = noEmojiStr; 669 } 670 @try{ 671 672 UITextView *textField = textView; 673 NSString *str = [[textField text] stringByReplacingOccurrencesOfString:@"?" withString:@""]; 674 NSLog(@"str--%@",str); 675 UITextRange *selectedRange = [textField markedTextRange]; 676 UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0]; 677 678 if (!position) { 679 CGFloat ascLen=[self countW:str :lenth]; 680 NSLog(@"ascLen------------------%f",ascLen); 681 if (ascLen > lenth) { 682 NSString *strNew = [NSString stringWithString:str]; 683 NSLog(@"strNew--%@",strNew); 684 NSLog(@"_subLen%f",lenth); 685 if (lenth==0) { 686 lenth=strNew.length; 687 } 688 [textField setText:[strNew substringToIndex:lenth]]; 689 } 690 } 691 else{ 692 } 693 } 694 @catch(NSException *exception) { 695 NSLog(@"exception:%@", exception); 696 } 697 @finally { 698 699 } 700 } 701 - (CGFloat)countW:(NSString *)s :(CGFloat)lenth 702 { 703 int i;CGFloat n=[s length],l=0,a=0,b=0; 704 CGFloat wLen=0; 705 unichar c; 706 for(i=0;i<n;i++){ 707 c=[s characterAtIndex:i]; 708 if(isblank(c)){ 709 b++; 710 }else if(isascii(c)){ 711 a++; 712 }else{ 713 l++; 714 } 715 wLen=l+(CGFloat)((CGFloat)(a+b)/2.0); 716 NSLog(@"wLen--%f",wLen); 717 if (wLen>=7.5&&wLen<8.5) { 718 lenth=l+a+b; 719 } 720 } 721 if(a==0 && l==0) 722 { 723 lenth=0; 724 return 0; 725 } 726 else{ 727 728 return wLen; 729 } 730 } 731 732 733 734 735 #pragma mark - 获取设备当前网络IP地址 736 + (NSString *)getIPAddress:(BOOL)preferIPv4 737 { 738 NSArray *searchArray = preferIPv4 ? 739 @[ /*IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6,*/ IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] : 740 @[ /*IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4,*/ IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ; 741 NSDictionary *addresses = [self getIPAddresses]; 742 NSLog(@"addresses: %@", addresses); 743 __block NSString *address; 744 [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) 745 { 746 address = addresses[key]; 747 if(address) *stop = YES; 748 } ]; 749 return address ? address : @"0.0.0.0"; 750 } 751 752 + (BOOL)isValidatIP:(NSString *)ipAddress { 753 if (ipAddress.length == 0) { 754 return NO; 755 } 756 NSString *urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 757 "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 758 "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 759 "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; 760 761 NSError *error; 762 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error]; 763 764 if (regex != nil) { 765 NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])]; 766 767 if (firstMatch) { 768 NSRange resultRange = [firstMatch rangeAtIndex:0]; 769 NSString *result=[ipAddress substringWithRange:resultRange]; 770 //输出结果 771 NSLog(@"%@",result); 772 return YES; 773 } 774 } 775 return NO; 776 } 777 778 + (NSDictionary *)getIPAddresses 779 { 780 NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8]; 781 // retrieve the current interfaces - returns 0 on success 782 struct ifaddrs *interfaces; 783 if(!getifaddrs(&interfaces)) { 784 // Loop through linked list of interfaces 785 struct ifaddrs *interface; 786 for(interface=interfaces; interface; interface=interface->ifa_next) { 787 if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) { 788 continue; // deeply nested code harder to read 789 } 790 const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr; 791 char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ]; 792 if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) { 793 NSString *name = [NSString stringWithUTF8String:interface->ifa_name]; 794 NSString *type; 795 if(addr->sin_family == AF_INET) { 796 if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) { 797 type = IP_ADDR_IPv4; 798 } 799 } else { 800 const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr; 801 if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) { 802 type = IP_ADDR_IPv6; 803 } 804 } 805 if(type) { 806 NSString *key = [NSString stringWithFormat:@"%@/%@", name, type]; 807 addresses[key] = [NSString stringWithUTF8String:addrBuf]; 808 } 809 } 810 } 811 // Free memory 812 freeifaddrs(interfaces); 813 } 814 return [addresses count] ? addresses : nil; 815 } 816 + (NSString *)deviceIPAdress { 817 NSString *address = @"an error occurred when obtaining ip address"; 818 struct ifaddrs *interfaces = NULL; 819 struct ifaddrs *temp_addr = NULL; 820 int success = 0; 821 822 success = getifaddrs(&interfaces); 823 824 if (success == 0) { // 0 表示获取成功 825 826 temp_addr = interfaces; 827 while (temp_addr != NULL) { 828 if( temp_addr->ifa_addr->sa_family == AF_INET) { 829 // Check if interface is en0 which is the wifi connection on the iPhone 830 if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) { 831 // Get NSString from C String 832 address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 833 } 834 } 835 836 temp_addr = temp_addr->ifa_next; 837 } 838 } 839 840 freeifaddrs(interfaces); 841 return address?address:@"0.0.0.0"; 842 } 843 844 845 //1.获取电池电量(一般用百分数表示,大家自行处理就好) 846 -(CGFloat)getBatteryQuantity 847 { 848 return [[UIDevice currentDevice] batteryLevel]; 849 } 850 //2.获取电池状态(UIDeviceBatteryState为枚举类型) 851 -(UIDeviceBatteryState)getBatteryStauts 852 { 853 return [UIDevice currentDevice].batteryState; 854 } 855 //3.获取总内存大小 856 -(long long)getTotalMemorySize 857 { 858 return [NSProcessInfo processInfo].physicalMemory; 859 } 860 //4.获取当前可用内存 861 //-(long long)getAvailableMemorySize 862 //{ 863 // vm_statistics_data_t vmStats; 864 // mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT; 865 // kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&vmStats, &infoCount); 866 // if (kernReturn != KERN_SUCCESS) 867 // { 868 // return NSNotFound; 869 // } 870 // return ((vm_page_size * vmStats.free_count + vm_page_size * vmStats.inactive_count)); 871 //} 872 //5.获取已使用内存 873 //- (double)getUsedMemory 874 //{ 875 // task_basic_info_data_t taskInfo; 876 // mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT; 877 // kern_return_t kernReturn = task_info(mach_task_self(), 878 // TASK_BASIC_INFO, 879 // (task_info_t)&taskInfo, 880 // &infoCount); 881 // 882 // if (kernReturn != KERN_SUCCESS 883 // ) { 884 // return NSNotFound; 885 // } 886 // 887 // return taskInfo.resident_size; 888 //} 889 //6.获取总磁盘容量 890 //-(long long)getTotalDiskSize 891 //{ 892 // struct statfs buf; 893 // unsigned long long freeSpace = -1; 894 // if (statfs("/var", &buf) >= 0) 895 // { 896 // freeSpace = (unsigned long long)(buf.f_bsize * buf.f_blocks); 897 // } 898 // return freeSpace; 899 //} 900 901 //7.获取可用磁盘容量 902 //-(long long)getAvailableDiskSize 903 //{ 904 // struct statfs buf; 905 // unsigned long long freeSpace = -1; 906 // if (statfs("/var", &buf) >= 0) 907 // { 908 // freeSpace = (unsigned long long)(buf.f_bsize * buf.f_bavail); 909 // } 910 // return freeSpace; 911 //} 912 //8.容量转换 913 -(NSString *)fileSizeToString:(unsigned long long)fileSize 914 { 915 NSInteger KB = 1024; 916 NSInteger MB = KB*KB; 917 NSInteger GB = MB*KB; 918 919 if (fileSize < 10) { 920 return @"0 B"; 921 }else if (fileSize < KB) { 922 return @"< 1 KB"; 923 }else if (fileSize < MB) { 924 return [NSString stringWithFormat:@"%.1f KB",((CGFloat)fileSize)/KB]; 925 }else if (fileSize < GB) { 926 return [NSString stringWithFormat:@"%.1f MB",((CGFloat)fileSize)/MB]; 927 }else { 928 return [NSString stringWithFormat:@"%.1f GB",((CGFloat)fileSize)/GB]; 929 } 930 } 931 ////8.型号 932 //+ (NSString *)getCurrentDeviceModel:(UIViewController *)controller 933 //{ 934 // int mib[2]; 935 // size_t len; 936 // char *machine; 937 // 938 // mib[0] = CTL_HW; 939 // mib[1] = HW_MACHINE; 940 // sysctl(mib, 2, NULL, &len, NULL, 0); 941 // machine = malloc(len); 942 // sysctl(mib, 2, machine, &len, NULL, 0); 943 // 944 // NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 945 // free(machine); 946 // 947 // if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (A1332)"; 948 // if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (A1332)"; 949 // if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (A1349)"; 950 // if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4s (A1387/A1431)"; 951 // if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (A1428)"; 952 // if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (A1429/A1442)"; 953 // if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (A1456/A1532)"; 954 // if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (A1507/A1516/A1526/A1529)"; 955 // if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (A1453/A1533)"; 956 // if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (A1457/A1518/A1528/A1530)"; 957 // if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus (A1522/A1524)"; 958 // if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6 (A1549/A1586)"; 959 // if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s"; 960 // if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; 961 // if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G (A1213)"; 962 // if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G (A1288)"; 963 // if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G (A1318)"; 964 // if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G (A1367)"; 965 // if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G (A1421/A1509)"; 966 // 967 // if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G (A1219/A1337)"; 968 // if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (A1395)"; 969 // if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (A1396)"; 970 // if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (A1397)"; 971 // if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2 (A1395+New Chip)"; 972 // if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G (A1432)"; 973 // if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G (A1454)"; 974 // if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G (A1455)"; 975 // 976 // if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (A1416)"; 977 // if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (A1403)"; 978 // if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (A1430)"; 979 // if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (A1458)"; 980 // if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (A1459)"; 981 // if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (A1460)"; 982 // 983 // if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (A1474)"; 984 // if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (A1475)"; 985 // if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air (A1476)"; 986 // if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G (A1489)"; 987 // if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G (A1490)"; 988 // if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G (A1491)"; 989 // 990 // if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator"; 991 // if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator"; 992 // return platform; 993 //} 994 ////10.当前手机连接的WIFI名称(SSID) 995 //- (NSString *)getWifiName 996 //{ 997 // NSString *wifiName = nil; 998 // 999 // CFArrayRef wifiInterfaces = CNCopySupportedInterfaces(); 1000 // if (!wifiInterfaces) { 1001 // return nil; 1002 // } 1003 // 1004 // NSArray *interfaces = (__bridge NSArray *)wifiInterfaces; 1005 // 1006 // for (NSString *interfaceName in interfaces) { 1007 // CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName)); 1008 // 1009 // if (dictRef) { 1010 // NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef; 1011 // 1012 // wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID]; 1013 // 1014 // CFRelease(dictRef); 1015 // } 1016 // } 1017 // 1018 // CFRelease(wifiInterfaces); 1019 // return wifiName; 1020 //} 1021 + (BOOL)isMobileNumber:(NSString *)mobileNum 1022 { 1023 if (mobileNum.length<1) { 1024 return NO; 1025 } 1026 NSString *str1 = [mobileNum substringToIndex:1]; 1027 NSLog(@"===stri&%@",str1); 1028 1029 if (mobileNum.length==11&&[str1 isEqualToString:@"1"]) { 1030 return 1; 1031 }else{ 1032 return 0; 1033 } 1034 //以上为彭来智自己修改的,下面的不用 1035 if (mobileNum.length != 11) 1036 { 1037 return NO; 1038 } 1039 /** 1040 * 手机号码: 1041 * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9] 1042 * 移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705 1043 * 联通号段: 130,131,132,155,156,185,186,145,176,1709 1044 * 电信号段: 133,153,180,181,189,177,1700 1045 */ 1046 NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[0678])\\d{8}$"; 1047 /** 1048 * 中国移动:China Mobile 1049 * 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705 1050 */ 1051 NSString *CM = @"(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\\d{8}$)|(^1705\\d{7}$)"; 1052 /** 1053 * 中国联通:China Unicom 1054 * 130,131,132,155,156,185,186,145,176,1709 1055 */ 1056 NSString *CU = @"(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\\d{8}$)|(^1709\\d{7}$)"; 1057 /** 1058 * 中国电信:China Telecom 1059 * 133,153,180,181,189,177,1700,199 1060 */ 1061 NSString *CT = @"(^1(33|53|77|99|8[019])\\d{8}$)|(^1700\\d{7}$)"; 1062 1063 1064 NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE]; 1065 NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM]; 1066 NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU]; 1067 NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT]; 1068 1069 if (([regextestmobile evaluateWithObject:mobileNum] == YES) 1070 || ([regextestcm evaluateWithObject:mobileNum] == YES) 1071 || ([regextestct evaluateWithObject:mobileNum] == YES) 1072 || ([regextestcu evaluateWithObject:mobileNum] == YES)) 1073 { 1074 return YES; 1075 } 1076 else 1077 { 1078 return NO; 1079 } 1080 } 1081 1082 //把一个字符串除了前后各两位其他加星 1083 1084 +(NSString *)stringAddStarsWithString:(NSString *)string 1085 { 1086 if (string.length<3) { 1087 return string; 1088 } 1089 NSString *str1 = [NSString stringWithFormat:@"%@",[string substringToIndex:1]]; 1090 NSString *str2 = [NSString stringWithFormat:@"%@",[string substringFromIndex:string.length-1]]; 1091 NSString *str3 = @""; 1092 for (int i = 0; i<string.length-2; i++) { 1093 1094 str3 = [NSString stringWithFormat:@"%@*",str3]; 1095 1096 } 1097 string = [NSString stringWithFormat:@"%@%@%@",str1,str3,str2]; 1098 1099 return string; 1100 } 1101 1102 //+ (UIImage *)creatNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat)size; 1103 1104 +(NSString *)countdownStartTime:(NSString *)startTime{ 1105 1106 1107 NSString *TIME = [startTime substringToIndex:10]; 1108 NSTimeInterval time = [TIME floatValue]; 1109 NSDate *oldDate = [NSDate dateWithTimeIntervalSince1970:time]; 1110 1111 // NSDate *oldDate = [NSDate date]; 1112 NSDate *currentDate = [NSDate date]; 1113 NSLog(@"lastDate == %@",currentDate); 1114 1115 NSCalendar *cal = [NSCalendar currentCalendar]; 1116 unsigned int unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 1117 NSDateComponents *dateComponents = [cal components:unitFlags fromDate:oldDate toDate:currentDate options:0]; 1118 1119 float sec = [dateComponents hour]*3600 + [dateComponents minute]*60+ [dateComponents second]; 1120 1121 float surplusMin = (30*60 - sec)/60; 1122 1123 if (surplusMin == 00) { 1124 return @"订单关闭"; 1125 }else{ 1126 return [NSString stringWithFormat:@"剩余:%d分%d秒", [dateComponents minute],[dateComponents second]]; 1127 } 1128 } 1129 @end