NSPredicate - 使用两个条件进行评估

Posted

技术标签:

【中文标题】NSPredicate - 使用两个条件进行评估【英文标题】:NSPredicate - Evaluate with two conditions 【发布时间】:2013-12-10 06:26:17 【问题描述】:

我想知道如何使用 NSPredicate 评估满足两个条件的 NSString。例如,如何检查一个至少应该有一个大写字母和一个数字的字符串。

【问题讨论】:

【参考方案1】:

您可以对两个或多个条件使用 ANDing。

 NSManagedObjectContext *context = [appDelegate managedObjectContext];
 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entityDescription];

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fbUID = %@ AND birthDate = %d AND birthMonth = %d AND greetingYear = %d", uID, birthDate, birthMonth, greetingYear];

//NSLog(@"%@ :",predicate);
[fetchRequest setPredicate:predicate];

 NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

您可以在 NSPredicate HERE 上查看更多信息。

【讨论】:

嗨..您的回答似乎是正确的。但我能够在几行代码中使用 reg ex 来做到这一点。谢谢你的帮助..【参考方案2】:

一种方法是:

NSCharacterSet *upperCaseCharacters = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLKMNOPQRSTUVWXYZ"];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) 

    return ([evaluatedObject rangeOfCharacterFromSet:upperCaseCharacters].location != NSNotFound && [evaluatedObject rangeOfCharacterFromSet:numbers].location != NSNotFound);

];

NSString *stringToEvaluate = @"aasad5D";

BOOL result = [predicate evaluateWithObject:stringToEvaluate];

另一种解决方案是复合谓词,请参阅此问题,例如如何使用复合谓词create a Compound Predicate in coreData xcode iphone。

【讨论】:

嗨..您的回答似乎是正确的。但我能够在几行代码中使用 reg ex 来做到这一点。谢谢你的帮助..【参考方案3】:

我自己找到了解决方案。我用正则表达式和谓词来解决这个问题。

NSPredicate *pwdCheck = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"(?=.*?[A-Z])(?=.*?[0-9]).*"];
bool isValid = [pwdCheck evaluateWithObject:@"99a99A3w"];

感谢您的帮助

【讨论】:

以上是关于NSPredicate - 使用两个条件进行评估的主要内容,如果未能解决你的问题,请参考以下文章

在 NSPredicate 中结合两个条件

使用 ANY 和两个条件创建 NSPredicate

iOS NSPredicate的学习讲解

如果 NSPredicate 失败,啥输出将返回 Fetch 请求

NSPredicate 在 NSString 类型的两个日期之间进行过滤

奇怪的 NSPredicate 行为?