检查NSString是否包含base64数据 [英] Checking if an NSString contains base64 data

查看:414
本文介绍了检查NSString是否包含base64数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何检查NSString是否包含if语句中的base64数据?因为base64以完全随机的方式对数据进行编码,所以我无法在NSString中搜索短语,因此我需要检查字符串的内容是否会产生数据文件。

解决方案

这是我创建的 NSString 的类别应该有效:

  @interface NSString(MDBase64Additions)
- (BOOL)isBase64Data;
@end

@implementation NSString(MDBase64Additions)

- (BOOL)isBase64Data {
if([self length]%4 == 0) {
static NSCharacterSet * invertedBase64CharacterSet = nil;
if(invertedBase64CharacterSet == nil){
invertedBase64CharacterSet = [[[NSCharacterSet
characterSetWithCharactersInString:
@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / =]
invertedSet] retain];
}
return [self rangeOfCharacterFromSet:invertedBase64CharacterSet
options:NSLiteralSearch] .location == NSNotFound;
}
返回NO;
}

@end

如果您预计换行或空白数据中的空格,您可以更新此方法以删除那些(可能是 NSCharacterSet + whitespaceCharacterSet )。 / p>

如果主要只有一个类将使用此类别方法,则可以将此代码放在该类的上方的.m文件中实现块。如果您认为您可能希望从多个班级中使用该类别,则可以创建一个单独的.h& .m对包含它(例如 MDFoundationAdditions.h MDFoundationAdditions.m ),然后将其导入到这些类中。



使用:

  NSString * dataString = / *假设存在* /; 

if([dataString isBase64Data]){

}


How can I check to see if an NSString contains base64 data in an if statement? Because base64 encodes the data in a completely random way, I can't search for a phrase within the NSString so instead I will need to check to see if the contents of the string results in a data file.

解决方案

Here's a category on NSString I created that should work:

@interface NSString (MDBase64Additions)
- (BOOL)isBase64Data;
@end

@implementation NSString (MDBase64Additions)

- (BOOL)isBase64Data {
    if ([self length] % 4 == 0) {
        static NSCharacterSet *invertedBase64CharacterSet = nil;
        if (invertedBase64CharacterSet == nil) {
            invertedBase64CharacterSet = [[[NSCharacterSet
               characterSetWithCharactersInString:
        @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="]
                                     invertedSet] retain];
        }
        return [self rangeOfCharacterFromSet:invertedBase64CharacterSet
           options:NSLiteralSearch].location == NSNotFound;
    }
    return NO;
}

@end

If you expect newlines or blank spaces in the data, you could update this method to remove those first (likely NSCharacterSet's +whitespaceCharacterSet).

If there's primarily just one class where you'll be using this category method, you could put this code inside its .m file above that class's @implementation block. If you think you might want to use that category from more than one class, you could create a separate .h & .m pair to contain it (e.g. MDFoundationAdditions.h, MDFoundationAdditions.m), and then import it into those classes.

To use:

NSString *dataString = /* assume exists */;

if ([dataString isBase64Data]) {

}

这篇关于检查NSString是否包含base64数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆