使用短语和数字序列设置 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的主要内容,如果未能解决你的问题,请参考以下文章