J'ai un NSPredicate comme celui-ci:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString];
Mais cela retournera tout ce qui contient cette chaîne. Par exemple: si mon entité.nom est où:
text
texttwo
textthree
randomtext
et le myString
était text
alors toutes ces chaînes correspondraient. Je voudrais que si myString
soit text
il ne retourne que le premier objet avec le nom text
et si myString
était randomtext
il retournerait le quatrième objet avec le nom randomtext
. Je recherche également que ce soit le cas insensible et qu'il ignore les espaces blancs
Cela devrait le faire:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name LIKE[c] %@", myString];
LIKE
correspond aux chaînes avec? et * en tant que caractères génériques. Le [c]
indique que la comparaison doit être insensible à la casse.
Si tu ne veux pas? et * pour être traités comme des caractères génériques, vous pouvez utiliser ==
au lieu de LIKE
:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name ==[c] %@", myString];
Plus d'informations dans la syntaxe de chaîne de format de prédicat NSPredicate documentation .
Vous pouvez utiliser la correspondance d'expressions régulières avec votre prédicat, comme ceci:
NSString *str = @"test";
NSMutableString *arg = [NSMutableString string];
[arg appendString:@"\\s*\\b"];
[arg appendString:str];
[arg appendString:@"\\b\\s*"];
NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF matches[c] %@", arg];
NSArray *a = [NSArray arrayWithObjects:@" test ", @"test", @"Test", @"TEST", nil];
NSArray *b = [a filteredArrayUsingPredicate:p];
Le morceau de code ci-dessus construit une expression régulière qui fait correspondre les chaînes avec des espaces facultatifs au début et/ou à la fin, avec le mot cible entouré par les marqueurs "limite de mot" \b
. Le [c]
après matches
signifie "faire la distinction entre les majuscules et les minuscules".
Cet exemple utilise un tableau de chaînes; pour le faire fonctionner dans votre environnement, remplacez SELF
par entity.name
.