IOS笔记
手机号验证包括香港手机号判断
+ (BOOL)matchesWithPhoneNumber:(NSString *)phoneNumber
{
return [self matchesWithFormatString:@"^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$|^(5|6|8|9)\\d{7}$" tagaetStr:phoneNumber];
}
/**
* 指定格式的匹配
*/
+ (BOOL)matchesWithFormatString:(NSString *)formatStr tagaetStr:(NSString *)targetStr
{
NSString *emailRegex = formatStr;
NSPredicate *match = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailRegex];
return [match evaluateWithObject:targetStr];
}
判断密码格式
+(BOOL)validateWithPassword:(NSString *)password
{
//密码只包含字母,数字,字符中至少两种
NSString * regex = @"^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,18}$";
NSPredicate * pas= [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [pas evaluateWithObject:password];
}
判断姓名格式
+(BOOL)validateUserName:(NSString *)name
{
NSString *userNameRegex = @"^[A-Za-z0-9]{3,20}+$";
NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
BOOL B = [userNamePredicate evaluateWithObject:name];
return B;
}
+(BOOL)validateNickname:(NSString *)nickname
{
NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{2,10}$";
NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
return [passWordPredicate evaluateWithObject:nickname];
}
邮箱
+(BOOL)ValidateEmail:(NSString *)email {
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}
过滤所有Emoji标签符号
+(BOOL)stringContainEmoji:(NSString *)emoji{
__block BOOL returnValue = NO;
[emoji enumerateSubstringsInRange:NSMakeRange(0, [emoji length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
const unichar hs = [substring characterAtIndex:0];
// surrogate pair
if (0xd800 <= hs && hs <= 0xdbff) {
if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1];
const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f) {
returnValue = YES;
}
}
} else if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1];
if (ls == 0x20e3) {
returnValue = YES;
}
} else {
// non surrogate
if (0x2100 <= hs && hs <= 0x27ff) {
returnValue = YES;
} else if (0x2B05 <= hs && hs <= 0x2b07) {
returnValue = YES;
} else if (0x2934 <= hs && hs <= 0x2935) {
returnValue = YES;
} else if (0x3297 <= hs && hs <= 0x3299) {
returnValue = YES;
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
returnValue = YES;
}
}
}];
return returnValue;
}
字符串替换
+(NSString *)StringChooseString:(NSString *)chooseStr{
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""];
NSString *trimmedString = [chooseStr stringByTrimmingCharactersInSet:set];
NSLog(@"DELECT----%@",trimmedString);
NSString *str = [trimmedString stringByReplacingOccurrencesOfString:@"\"," withString:@"、"];//替换字符
NSString * twoStr = [str stringByReplacingOccurrencesOfString:@"\"" withString:@""];
NSLog(@"DELECTONE----%@",twoStr);
return twoStr;
}
判断字符串 首字符是否为字母
+(BOOL)JudgeString:(NSString *)string{
NSString *regex = @"[A-Za-z]+";
NSPredicate*predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [predicate evaluateWithObject:string];
}
时间戳转换成时间
+ (NSString *)dateWithString:(NSString *)str Format:(NSString *)format
{
NSTimeInterval time = [str doubleValue];
/** [[NSDate date] timeIntervalSince1970]*1000;*/
NSDate *detaildate = [NSDate dateWithTimeIntervalSince1970:time];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormatter setDateFormat:format];//设定时间格式,这里可以设置成自己需要的格式
NSString *currentDateStr = [dateFormatter stringFromDate:detaildate];
return currentDateStr;
}
时间戳转换时间-毫秒
+ (NSString *)dateMSWithString:(NSString *)str Format:(NSString *)format
{
NSTimeInterval time = [str doubleValue]/1000;
/** [[NSDate date] timeIntervalSince1970]*1000;*/
NSDate *detaildate = [NSDate dateWithTimeIntervalSince1970:time];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormatter setDateFormat:format];//设定时间格式,这里可以设置成自己需要的格式
NSString *currentDateStr = [dateFormatter stringFromDate:detaildate];
return currentDateStr;
}
转换成时间
+(NSString *)dateWithDate:(NSDate *)date Format:(NSString *)format
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormatter setDateFormat:format];//设定时间格式,这里可以设置成自己需要的格式
NSString *currentDateStr = [dateFormatter stringFromDate:date];
return currentDateStr;
}
NSString 转NSDate
+ (NSDate *)dateWithdate:(NSString *)str Format:(NSString *)format
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormatter setDateFormat:format];//设定时间格式,这里可以设置成自己需要的格式
NSDate * mainDate = [dateFormatter dateFromString:str];
return mainDate;
}
当前时间戳转换成时间
+ (NSString *)currentDateWithFormat:(NSString *)format
{
NSDate *detaildate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormatter setDateFormat:format];//设定时间格式,这里可以设置成自己需要的格式
NSString *currentDateStr = [dateFormatter stringFromDate:detaildate];
return currentDateStr;
}
系统通知是否打开
//检测通知是否打开iOS8以后有所变化 所以需要适配iOS7
+(BOOL)openThePushNotification{
if (IOS8) {//IOS8写的宏
if ([[UIApplication sharedApplication] currentUserNotificationSettings].types == UIUserNotificationTypeNone) {
// 未打开通知//这个是个自定义的alertView 当用户没有打开推送时 会弹出 可以替换成自己项目里面的弹框
if (IOS8) {//iOS8以后跳转到设置界面的代码也出现了变化 下面这段代码是直接跳转到APP的设置界面
//跳入当前App设置界面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}else{
//适配iOS7 ,跳入系统设置界面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:General&path=Reset"]];
}
return NO;
}else{
return YES;
}
}else{ // ios7
if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes] == UIUserNotificationTypeNone) {
if (IOS8) {
//跳入当前App设置界面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}else{
//适配iOS7 ,跳入系统设置界面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:General&path=Reset"]];
}
return NO;
}else{
return YES;
}
}
}
获取手机型号
+ (NSString *)deviceVersion
{
struct utsname systemInfo;
uname(&systemInfo);
NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
if ([platform isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
if ([platform isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";
if ([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8";
if ([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
if ([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus";
if ([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
if ([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X";
if ([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X";
if ([platform isEqualToString:@"iPhone11,8"]) return @"iPhone XR";
if ([platform isEqualToString:@"iPhone11,2"]) return @"iPhone XS";
if ([platform isEqualToString:@"iPhone11,6"]) return @"iPhone XS Max";
if ([platform isEqualToString:@"iPhone11,4"]) return @"iPhone XS Max";
if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
return platform;
}
字典转JSON
+ (NSString *)dictionaryToJson:(NSDictionary *)dict
{
BOOL isValidJSONObject = [NSJSONSerialization isValidJSONObject:dict];
if (isValidJSONObject)
{
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
return nil;
}
JSON转字典
+ (NSDictionary *)jsonToDictionary:(NSString *)jsonString
{
if (jsonString == nil)
{
return nil;
}
NSLog(@"%@",jsonString);
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
NSLog(@"json解析失败:%@",err);
return nil;
}
return dic;
}
判断是否输入了emoji 表情
+ (BOOL)stringContainsEmoji:(NSString *)string
{
__block BOOL isEomji = NO;
[string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
const unichar hs = [substring characterAtIndex:0];
if (0xd800 <= hs && hs <= 0xdbff) {
if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1];
const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f)
{
isEomji = YES;
}
}
} else if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1];
if (ls == 0x20e3|| ls ==0xfe0f) {
isEomji = YES;
}
} else {
if (0x2B05 <= hs && hs <= 0x2b07) {
isEomji = YES;
} else if (0x2934 <= hs && hs <= 0x2935) {
isEomji = YES;
} else if (0x3297 <= hs && hs <= 0x3299) {
isEomji = YES;
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50|| hs == 0x231a ) {
isEomji = YES;
}
}
}];
return isEomji;
}
通过文字来计算文字所占的区域大小
+ (CGSize)sizeForText:(NSString *)text withFont:(UIFont *)font withSize:(CGSize)size
{
NSDictionary *attributes = @{NSFontAttributeName:font};
//通过文字来获取文字所占的大小
CGRect rect = [text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
return rect.size;
}
字典按升序排序
+ (NSString *)stringWithAscendingOrderDict:(NSDictionary*)dict
{
NSArray*keys = [dict allKeys];
NSArray*sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2)
{
return[obj1 compare:obj2 options:NSNumericSearch];//正序
}];
NSString*str =@"";
for(NSString*categoryId in sortedArray)
{
id value = [dict objectForKey:categoryId];
if ([value isKindOfClass:[NSDictionary class]])
{
value = [self stringWithAscendingOrderDict:value];
}
if ([str length] !=0)
{
str = [str stringByAppendingString:@"&"];
}
str = [str stringByAppendingFormat:@"%@=%@",categoryId,value];
}
return str;
}
压缩图片
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)size {
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
URLEncoding格式
+ (NSString *)URLEncodedString:(NSString *)strUrl
{
return [strUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
匹配身份证号码
+ (BOOL)matchesWithIDCardNumber:(NSString *)idNumber
{
return [self matchesWithFormatString:@"^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$|^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$" tagaetStr:idNumber];
}
匹配姓名
+ (BOOL)matchesWithName:(NSString *)nameStr
{
return [self matchesWithFormatString:@"^[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*" tagaetStr:nameStr];
}
匹配6-16位的纯汉字
+ (BOOL)matchesWithChinese:(NSString *)nameStr
{
return [self matchesWithFormatString:@"^[\u4e00-\u9fa5]{6,16}$" tagaetStr:nameStr];
}
指定格式的匹配
+ (BOOL)matchesWithFormatString:(NSString *)formatStr tagaetStr:(NSString *)targetStr
{
NSString *emailRegex = formatStr;
NSPredicate *match = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailRegex];
return [match evaluateWithObject:targetStr];
}
Base64加密
+ (NSString *)base64WithString:(NSString *)str
{
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
return [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
改变按钮倒计时与状态
+(void)changeVerifyButtonState:(UIButton *)sender
{
__block int countDown = 120;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0);
dispatch_source_set_event_handler(timer, ^{
if(countDown <= 0)
{
//倒计时结束,关闭
dispatch_source_cancel(timer);
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示
sender.enabled = YES;
[sender setTitle:@"获取验证码" forState:UIControlStateNormal];
});
}
else
{
NSString *TimeString = [NSString stringWithFormat:@"%.2d", countDown];
dispatch_async(dispatch_get_main_queue(), ^{
[sender setTitle:[NSString stringWithFormat:@"%@秒再次获取",TimeString] forState:UIControlStateNormal];
sender.enabled = NO;
});
countDown--;
}
});
dispatch_resume(timer);
}
判断银行卡是否合法
+(BOOL)checkBankCardNumber:(NSString *)cardNumber
{
int oddSum = 0; // 奇数和
int evenSum = 0; // 偶数和
int allSum = 0; // 总和
// 循环加和
for (NSInteger i = 1; i <= cardNumber.length; i++)
{
NSString *theNumber = [cardNumber substringWithRange:NSMakeRange(cardNumber.length-i, 1)];
int lastNumber = [theNumber intValue];
if (i%2 == 0)
{
// 偶数位
lastNumber *= 2;
if (lastNumber > 9)
{
lastNumber -=9;
}
evenSum += lastNumber;
}
else
{
// 奇数位
oddSum += lastNumber;
}
}
allSum = oddSum + evenSum;
// 是否合法
if (allSum%10 == 0)
{
return YES;
}
else
{
return NO;
}
}
获取当前系统时间的时间戳
+(NSInteger)getNowTimestamp{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
//设置时区,这个对于时间的处理有时很重要
NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];
[formatter setTimeZone:timeZone];
NSDate *datenow = [NSDate date];//现在时间
NSLog(@"设备当前的时间:%@",[formatter stringFromDate:datenow]);
//时间转时间戳的方法:
NSInteger timeSp = [[NSNumber numberWithDouble:[datenow timeIntervalSince1970]] integerValue];
NSLog(@"设备当前的时间戳:%ld",(long)timeSp); //时间戳的值
return timeSp;
}
每隔4个字符添加一个空格的字符串算法
+ (NSString *)dealWithString:(NSString *)number
{
NSString *doneTitle = @"";
int count = 0;
for (int i = 0; i < number.length; i++) {
count++;
doneTitle = [doneTitle stringByAppendingString:[number substringWithRange:NSMakeRange(i, 1)]];
if (count == 4) {
doneTitle = [NSString stringWithFormat:@"%@ ", doneTitle];
count = 0;
}
}
NSLog(@"%@", doneTitle);
return doneTitle;
}
字符串截取
+ (NSString *)InterceptionWithString:(NSString *)str {
NSString * mainStr = @"";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"[]{}(#%-*+=_)\\|~(<>$%^&*)_+ 0123456789"];
mainStr = [[str componentsSeparatedByCharactersInSet: doNotWant]componentsJoinedByString: @""];
return mainStr;
}
图片转灰度
+(UIImage *)changeGrayImage:(UIImage *)oldImage
{
int bitmapInfo = kCGImageAlphaNone;
int width = oldImage.size.width;
int height = oldImage.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate (nil,
width,
height,
8,
0,
colorSpace,
bitmapInfo);
CGColorSpaceRelease(colorSpace);
if (context == NULL) {
return nil;
}
CGContextDrawImage(context,
CGRectMake(0, 0, width, height), oldImage.CGImage);
UIImage *grayImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)];
CGContextRelease(context);
return grayImage;
}
下载地址