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

Setting up NSPredicate with a phrase and number sequence

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

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

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

谁能给我指出正确的方向?

您可以使用 NSRegularExpression 正如@Larme 所说:

- (BOOL)validateString:(NSString *)string {
    return [string rangeOfString:@"^SPOT\d{4}$" 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

您可以使用 NSPredicate with a regular expression.

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

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

试试这个:

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