判断是否是手机号
+ (BOOL)isRightInPutOfString:(NSString *)string withInputString:(NSString *) inputString{
if (string.length >= 11) {
return NO;
}
NSString *passWordRegex = @"[0-9]";
NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passWordRegex];
if (![passWordPredicate evaluateWithObject:inputString]) {
return NO;
}
return YES;
}
根据传入的时间格式,将时间戳转化为时间
+ (NSString *)getDateFormMate:(NSString *)formate withTimeStr:(NSString *)timeStr{
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]
[formatter setDateFormat:formate]
NSTimeInterval startDateInterval = [timeStr doubleValue] / 1000
NSDate *startDate = [NSDate dateWithTimeIntervalSince1970:startDateInterval]
NSString *dateStr = [formatter stringFromDate:startDate]
return dateStr
}
是否含有emoj表情
//是否含有表情
+ (BOOL)stringContainsEmoji:(NSString *)string{
__block BOOL returnValue = 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) {
returnValue = YES
}
}
} else if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1]
if (ls == 0x20e3) {
returnValue = YES
}
} else {
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
}
判断是否全是空格
+ (BOOL) isEmpty:(NSString *) str {
if (!str) {
return true;
} else {
NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimedString = [str stringByTrimmingCharactersInSet:set];
if ([trimedString length] == 0) {
return true;
} else {
return false;
}
}
}
检测是否是手机号
+(BOOL)isMobileNumber:(NSString *)mobileNum{
NSString * MOBILE = @"^1(3[0-9]|5[0-9]|4[0-9]|8[0-9]|7[0-9])\\d{8}$";
NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
if (([regextestmobile evaluateWithObject:mobileNum] == YES)) {
return YES;
} else {
return NO;
}
}
检测是否是合法邮箱
//判断是否合法邮箱
+ (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]
}
验证身份证
+ (BOOL) validateIdentityCard: (NSString *)identityCard{
if (identityCard.length <= 0) {
return NO;
}
NSString *regex2 =@"(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)";
NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
if ([identityCardPredicate evaluateWithObject:identityCard] == YES) {
return YES;
} else {
return NO;
}
}
获取文件的MD5
+ (NSString*)getMD5WithData:(NSData *)data{
const char* original_str = (const char *)[data bytes];
unsigned char digist[CC_MD5_DIGEST_LENGTH];
CC_MD5(original_str, (uint)strlen(original_str), digist);
NSMutableString *outPutStr = [NSMutableString stringWithCapacity:10];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH;i++){
[outPutStr appendFormat:@"%02x",digist[i]];
}
return [outPutStr lowercaseString];
}
+(NSString*)getFileMD5WithPath:(NSString*)path
{
if (!path) {
return @"文件不存在";
}
return (__bridge_transfer NSString *)FileMD5HashCreateWithPath((__bridge CFStringRef)path, FileHashDefaultChunkSizeForReadingData);
}
CFStringRef FileMD5HashCreateWithPath(CFStringRef filePath,size_t chunkSizeForReadingData) {
CFStringRef result = NULL;
CFReadStreamRef readStream = NULL;
CFURLRef fileURL =
CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)filePath,
kCFURLPOSIXPathStyle,
(Boolean)false);
if (!fileURL) goto done;
readStream = CFReadStreamCreateWithFile(kCFAllocatorDefault,
(CFURLRef)fileURL);
if (!readStream) goto done;
bool didSucceed = (bool)CFReadStreamOpen(readStream);
if (!didSucceed) goto done;
CC_MD5_CTX hashObject;
CC_MD5_Init(&hashObject);
if (!chunkSizeForReadingData) {
chunkSizeForReadingData = FileHashDefaultChunkSizeForReadingData;
}
bool hasMoreData = true;
while (hasMoreData) {
uint8_t buffer[chunkSizeForReadingData];
CFIndex readBytesCount = CFReadStreamRead(readStream,(UInt8 *)buffer,(CFIndex)sizeof(buffer));
if (readBytesCount == -1) break;
if (readBytesCount == 0) {
hasMoreData = false;
continue;
}
CC_MD5_Update(&hashObject,(const void *)buffer,(CC_LONG)readBytesCount);
}
didSucceed = !hasMoreData;
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(digest, &hashObject);
if (!didSucceed) goto done;
char hash[2 * sizeof(digest) + 1];
for (size_t i = 0; i < sizeof(digest); ++i) {
snprintf(hash + (2 * i), 3, "%02x", (int)(digest[i]));
}
result = CFStringCreateWithCString(kCFAllocatorDefault,(const char *)hash,kCFStringEncodingUTF8);
done:
if (readStream) {
CFReadStreamClose(readStream);
CFRelease(readStream);
}
if (fileURL) {
CFRelease(fileURL);
}
return result;
}
某个日期和当前这天相差多久
/**
计算时间戳和当前日期相差几天
@param date 时间错
@return 相差几天
*/
+ (NSInteger)getDifferenceByDate:(NSString *)date {
//获得当前时间
NSDate *now = [NSDate date]
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]
//设定时间格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]
NSTimeInterval startDateInterval = [date doubleValue] / 1000
NSDate *oldDate = [NSDate dateWithTimeIntervalSince1970:startDateInterval]
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]
unsigned int unitFlags = NSCalendarUnitDay
NSDateComponents *comps = [gregorian components:unitFlags fromDate:oldDate toDate:now options:0]
return [comps day]
}
把字典转成字符串
+ (NSString*)dictionaryToJson:(NSDictionary *)dic{
NSError *parseError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
把字符串转成字典
+(NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) {
return nil;
}
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;
}
TextFiled不限制高亮的输入
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(BankNameTextChange:) name:@"UITextFieldTextDidChangeNotification" object:_textfiled]
- (void)BankNameTextChange:(NSNotification *)obj {
UITextField *textField = (UITextField *)obj.object
NSString *toBeString = textField.text
NSString *lang = textField.textInputMode.primaryLanguage
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange]
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0]
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > 10) {
textField.text = [toBeString substringToIndex:10]
}
} else {}// 有高亮选择的字符串,则暂不对文字进行统计和限制
} else { // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
if (toBeString.length > 10) {
textField.text = [toBeString substringToIndex:10]
}
}
}