判断是否是手机号
// 判断手机号.只能输入0-9
+ (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{
/**
* 手机号码
* 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
* 联通:130,131,132,152,155,156,185,186
* 电信:133,1349,153,180,189,177
*/
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
/**
NSData MD5加密
@param data 图片的data
@return MD5
*/
+ (NSString*)getMD5WithData:(NSData *)data{
const char* original_str = (const char *)[data bytes];
unsigned char digist[CC_MD5_DIGEST_LENGTH]; //CC_MD5_DIGEST_LENGTH = 16
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) {
// Declare needed variables
CFStringRef result = NULL;
CFReadStreamRef readStream = NULL;
// Get the file URL
// CFURLRef *fileURL = ;
CFURLRef fileURL =
CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)filePath,
kCFURLPOSIXPathStyle,
(Boolean)false);
if (!fileURL) goto done;
// Create and open the read stream
readStream = CFReadStreamCreateWithFile(kCFAllocatorDefault,
(CFURLRef)fileURL);
if (!readStream) goto done;
bool didSucceed = (bool)CFReadStreamOpen(readStream);
if (!didSucceed) goto done;
// Initialize the hash object
CC_MD5_CTX hashObject;
CC_MD5_Init(&hashObject);
// Make sure chunkSizeForReadingData is valid
if (!chunkSizeForReadingData) {
chunkSizeForReadingData = FileHashDefaultChunkSizeForReadingData;
}
// Feed the data to the hash object
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);
}
// Check if the read operation succeeded
didSucceed = !hasMoreData;
// Compute the hash digest
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(digest, &hashObject);
// Abort if the read operation failed
if (!didSucceed) goto done;
// Compute the string result
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];
}
}
}
网友评论