123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- //
- // NSString+RQExtension.m
- // RQCommon
- //
- // Created by 张嵘 on 2018/11/21.
- // Copyright © 2018 张嵘. All rights reserved.
- //
- #import "NSString+RQExtension.h"
- #include <CommonCrypto/CommonCrypto.h>
- #define xmlRetError @"ERROR:not found <ns:return></ns:return>"
- @implementation NSString (RQExtension)
- #pragma mark - 文本高度计算
- - (CGSize)rq_sizeWithFont:(UIFont *)font {
- CGSize theSize;
- NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
- theSize = [self sizeWithAttributes:attributes];
- // 向上取整
- theSize.width = ceil(theSize.width);
- theSize.height = ceil(theSize.height);
- return theSize;
- }
- - (CGSize)rq_sizeWithFont:(UIFont *)font limitSize:(CGSize)limitSize {
- CGSize theSize;
- NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
- CGRect rect = [self boundingRectWithSize:limitSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil];
- theSize.width = ceil(rect.size.width);
- theSize.height = ceil(rect.size.height);
- return theSize;
- }
- - (CGSize)rq_sizeWithFont:(UIFont *)font limitWidth:(CGFloat)limitWidth {
- return [self rq_sizeWithFont:font limitSize:CGSizeMake(limitWidth, MAXFLOAT)];
- }
- #pragma mark - 文本内容处理
- - (NSString *)rq_removeBothEndsWhitespace {
- return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
- }
- - (NSString *)rq_removeBothEndsWhitespaceAndNewline {
- return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
- }
- - (NSString *)rq_trimWhitespace {
- NSMutableString *str = [self mutableCopy];
- CFStringTrimWhitespace((__bridge CFMutableStringRef)str);
- return str;
- }
- - (NSString *)rq_URLEncoding {
- NSString * result;
- if (@available(iOS 9.0, *)) {
- NSString *charactersToEscape = @"#[]@!$'()*+,;\"<>%{}|^~`";
- NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
- result = [[self description] stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
- } else {
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- //这里写出现警告的代码就能实现去除警告
- result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault,
- (CFStringRef)self,
- NULL,
- CFSTR("!*'();:@&=+$,/?%#[]"),
- kCFStringEncodingUTF8 ));
- #pragma clang diagnostic pop
- }
- return result;
- }
- - (NSString *)rq_URLDecoding {
- NSString * result;
- if (@available(iOS 9.0, *)) {
- result = [self stringByRemovingPercentEncoding];
- } else {
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- //这里写出现警告的代码就能实现去除警告
- result = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)self, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
- #pragma clang diagnostic pop
- }
-
- return result;
- }
- - (NSString *)rq_trimAllWhitespace {
- return [self stringByReplacingOccurrencesOfString:@" " withString:@""];
- }
- #pragma mark - 文本内容判断
- + (BOOL)rq_isContainChinese:(NSString *)string {
- for (int i = 0; i < [string length]; i++) {
- int a = [string characterAtIndex:i];
- if ( a > 0x4e00 && a < 0x9fff) {
- return YES;
- }
- }
- return NO;
- }
- + (BOOL)rq_isPureInt:(NSString *)string {
- NSScanner *scan = [NSScanner scannerWithString:string];
- int val;
- return [scan scanInt:&val] && [scan isAtEnd];
- }
- + (BOOL)rq_isPureFloat:(NSString *)string {
- NSScanner *scan = [NSScanner scannerWithString:string];
- float val;
- return [scan scanFloat:&val] && [scan isAtEnd];
- }
- + (BOOL)rq_isValidMobile:(NSString *)string {
- NSString *phoneRegex = @"^1[34578]\\d{9}$";
- NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
- return [phoneTest evaluateWithObject:string];
- }
- + (BOOL)rq_isPureDigitCharacters:(NSString *)string {
- string = [string stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];
- if (string.length > 0) {
- return NO;
- }
- return YES;
- }
- + (BOOL)rq_isValidCharacterOrNumber:(NSString *)string {
- // 编写正则表达式:只能是数字或英文,或两者都存在
- NSString *regex = @"^[a-z0-9A-Z]*$";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
- return [predicate evaluateWithObject:string];
- }
- + (BOOL)rq_isEmpty:(NSString *)string {
- if (!string) {
- return true;
- }else {
- NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
- NSString *trimedString = [string stringByTrimmingCharactersInSet:set];
- if ([trimedString length] == 0) {
- return true;
- }else {
- return false;
- }
- }
- }
- + (BOOL)rq_isValidEmail:(NSString *)string {
- NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
- return [predicate evaluateWithObject:string];
- }
- + (BOOL)rq_isValidQQ:(NSString *)string {
- NSString *regex = @"^[1-9][0-9]{4,9}$";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
- return [predicate evaluateWithObject:string];
- }
- #pragma mark - Other
- -(NSString* )getXlmRet
- {
- NSMutableString* mstr = [NSMutableString stringWithString:self];
-
- NSRange substr = [mstr rangeOfString:@"<ns:return>"];
- NSRange substr2 = [mstr rangeOfString:@"</ns:return>"];
- if (substr.location == NSNotFound || substr2.location == NSNotFound) {
- return xmlRetError;
- }
- NSString *result = [mstr substringWithRange:NSMakeRange(substr.location + substr.length, substr2.location - substr.location - substr.length)];
-
- return result;
- }
- -(NSString*)getCode{
- if (![self getXlmRet]) {
- return nil;
- }
- NSDictionary* root = [self jsonObject];
- return root[@"code"];
- }
- -(id)jsonObject
- {
- NSString* ret = [self getXlmRet];
- if (!ret)
- {
- return nil;
- }
- //options --dansonpro
- NSData* jsonData = [ret dataUsingEncoding:NSUTF8StringEncoding];
- NSDictionary* json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
- return json;
- }
- - (NSString *)md5Encrypt
- {
- const char *cStr = [self UTF8String];
- unsigned char result[16];
- CC_MD5( cStr, (unsigned int)strlen(cStr), result );
- NSString* str = [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
- result[0], result[1], result[2], result[3],
- result[4], result[5], result[6], result[7],
- result[8], result[9], result[10], result[11],
- result[12], result[13], result[14], result[15]
- ];
- str = [self toLower:str];
- return str;
- }
- -(NSString *)toLower:(NSString *)str
- {
- for (NSInteger i=0; i<str.length; i++) {
- if ([str characterAtIndex:i]>='A'&[str characterAtIndex:i]<='Z') {
- //A对应ASCII码的65 a对应ASCII码的97
- //大写换小写 ASCII编码 --Danson
- char temp=[str characterAtIndex:i]+32;
- NSRange range=NSMakeRange(i, 1);
- str=[str stringByReplacingCharactersInRange:range withString:[NSString stringWithFormat:@"%c",temp]];
- }
- }
- return str;
- }
- -(NSString *)toHighterWithLower:(NSString *)str
- {
- for (NSInteger i=0; i<str.length; i++) {
- if ([str characterAtIndex:i]>='a'&[str characterAtIndex:i]<='z') {
- //A对应ASCII码的65 a对应ASCII码的97
- //小写换大写 ASCII编码 --Danson
- char temp=[str characterAtIndex:i]-32;
- NSRange range=NSMakeRange(i, 1);
- str=[str stringByReplacingCharactersInRange:range withString:[NSString stringWithFormat:@"%c",temp]];
- }
- }
- return str;
- }
- -(CGFloat)heightForWid:(CGFloat)wid Font:(CGFloat)fontSize
- {
- if (self.length < 1) {
- return 20.0;
- }
- return [self boundingRectWithSize:CGSizeMake(wid, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: [UIFont rq_fontForPingFangSC_RegularFontOfSize:fontSize]} context:nil].size.height;
- }
- -(CGSize)sizeForFont:(CGFloat)fontSize
- {
- if (self.length < 1) {
- return CGSizeMake(20, 20);
- }
-
- return [self boundingRectWithSize:CGSizeMake(MAXFLOAT, 20) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:fontSize]} context:nil].size;
- }
- -(NSString*)base64
- {
- NSString* path = [[NSBundle mainBundle] pathForResource:self ofType:nil];
-
- UIImage *_originImage = [UIImage imageNamed:path];
- NSData *_data = UIImagePNGRepresentation(_originImage);
- NSString *_encodedImageStr = [_data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
- return _encodedImageStr;
- }
- /**
- Base64字符串转UIImage图片:、
- //UIImage图片转成Base64字符串:
- UIImage *originImage = [UIImage imageNamed:@"originImage.png"];
- NSData *data = UIImageJPEGRepresentation(originImage, 1.0f);
- NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
-
- //Base64字符串转UIImage图片:
- NSData *decodedImageData = [[NSData alloc]
- initWithBase64EncodedString:encodedImageStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
- UIImage *decodedImage = [UIImage imageWithData:decodedImageData];
- */
- /// 传入 秒 得到 xx:xx:xx
- /// @param totalTime 秒数
- + (NSString *)getMMSSFromSS:(NSString *)totalTime {
-
- NSInteger seconds = [totalTime integerValue];
-
- //format of hour
- NSString *str_hour = [NSString stringWithFormat:@"%02ld",seconds/3600];
- //format of minute
- NSString *str_minute = [NSString stringWithFormat:@"%02ld",(seconds%3600)/60];
- //format of second
- NSString *str_second = [NSString stringWithFormat:@"%02ld",seconds%60];
- //format of time
- NSString *format_time = [NSString stringWithFormat:@"%@:%@:%@",str_hour,str_minute,str_second];
-
- return format_time;
- }
- @end
- @implementation NSDictionary (Log)
- - (NSString *)descriptionWithLocale:(id)locale
- {
- NSMutableString *str = [NSMutableString string];
-
- [str appendString:@"{\n"];
-
- //遍历字典的所有键值对
- [self enumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop) {
- if (!key) {
- key = @"";
- }
- if (!obj) {
- obj = @"";
- }
- [str appendFormat:@"\t%@ = %@,\n", key, obj];
- }];
-
- [str appendString:@"}"];
-
- //查出最后一个,的范围
- NSRange range = [str rangeOfString:@","options:NSBackwardsSearch];
- if (range.length) {
- // 删掉最后一个,
- [str deleteCharactersInRange:range];
- }
-
- return str;
- }
- @end
- @implementation NSArray (Log)
- - (NSString *)descriptionWithLocale:(id)locale
- {
- NSMutableString *str = [NSMutableString string];
-
- [str appendString:@"[\n"];
-
- //遍历数组的所有元素
- [self enumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop) {
- [str appendFormat:@"%@,\n", obj];
- }];
-
- [str appendString:@"]"];
-
- //查出最后一个,的范围
- NSRange range = [str rangeOfString:@","options:NSBackwardsSearch];
- if (range.length) {
- // 删掉最后一个,
- [str deleteCharactersInRange:range];
- }
-
- return str;
- }
- @end
|