使用短语和数字序列设置 NSPredicate

Posted

技术标签:

【中文标题】使用短语和数字序列设置 NSPredicate【英文标题】:Setting up NSPredicate with a phrase and number sequence 【发布时间】:2015-06-16 09:17:33 【问题描述】:

如果这是一个过于具体的问题,我很抱歉。尝试搜索 NSPredicate 的基本帮助,但一无所获。

我正在尝试验证一个应该以特定单词开头的字符串(假设它是 SPOT,全部大写),后跟正好 4 个数字。

换句话说,例如,SPOT1234 或 SPOT0483 将通过验证。 SPAT1234、spot1234、SPOT123 或任何其他字符串都会失败。

谁能指出我正确的方向?

【问题讨论】:

NSRegularExpression? 你检查我的答案了吗? 【参考方案1】:

您可以使用NSRegularExpression @Larme 说的这样:

- (BOOL)validateString:(NSString *)string 
    return [string rangeOfString:@"^SPOT\\d4$" options:NSRegularExpressionSearch].location != NSNotFound;


NSLog(@"%d", [self validateString:@"SPOT123456789"]);  // false
NSLog(@"%d", [self validateString:@"SPAT1234"]);       // false
NSLog(@"%d", [self validateString:@"spot1234"]);       // false
NSLog(@"%d", [self validateString:@"SPOT123"]);        // false
NSLog(@"%d", [self validateString:@"SPOT0483"]);       // true

【讨论】:

对不起,我不清楚。任何以 SPOT 开头并以任意四位数字结尾的字符串都应该通过。 (不只是我给出的两个例子) 字符串必须是八位吗? “SPOTxxxx1234”通过与否? SPOTxxxx1234 应该会失败。该字符串必须总共有 8 个字符。前 4 个应该正好是“SPOT”。最后 4 位应该是任意数字。【参考方案2】:

您可以使用NSPredicate with a regular expression。

NSArray *testArray = @[@"SPOT1234", @"SPOT0483", @"SPAT1234", @"spot1234", @"SPOT123", @"SPOT1233232"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '^SPOT\\\\d4$'"];
NSArray *resultsArray = [testArray filteredArrayUsingPredicate:predicate];

resultsArray 将包含两个字符串:SPOT1234、SPOT0483

【讨论】:

很好,这个正则表达式是正确的。为了把它变成一个有效性检查,而不是一个数组过滤器,我使用了这个: - (BOOL)validateCodeWithString:(NSString*)code NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES '^SPOT\\\\d 4$'"];返回[测试评估对象:代码]; 【参考方案3】:

试试这个:

NSArray *arrStr = @[@"SPOT1212",@"spot1234",@"SPOT12233"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"self LIKE \"SPOT????\""]];
NSArray *filterArr = [arrStr filteredArrayUsingPredicate:predicate];

【讨论】:

以上是关于使用短语和数字序列设置 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

如何将远程 crate 的枚举序列化和反序列化为数字?

全文搜索,包含多个确切的短语和排除项

JSON 序列化 - 将枚举转换为数字

如何删除短语和后面的 2 个字符? [复制]

LUA 字符串短语匹配

将PKCS#12证书转换为PEM时输入PEM密码短语