问题
Here is my current NSPredicate:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode];
How can I make this case insensitive?
And I do not want to do any partial matching.
Example if they enter 123 for aUPCCode I do not want to get 123, 123a, 123b, 123c, ect. I would only want an exact match.
I thought about doing this but it seems a little ridiculous:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode,[ aUPCCode lowercaseString] ,[aUPCCode lowercaseString], [aUPCCode uppercaseString],[aUPCCode uppercaseString]];
回答1:
As Dave DeLong said, you can use:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC ==[c] %@ OR ItemID ==[c] %@", aUPCCode,aUPCCode];
Edit:
Use ==[c]
instead of ==[cd]
or you get accents too (abcd == àbcd
).
回答2:
As Sinetris said, the above works in Objective-C.
It works for case-insensitive. Fetches all results which have the "example" string value in it.
Update Swift 4.0/5.0
let predicateIsNumber = NSPredicate(format: "keywordContactNo contains[c] %@", example!)
Hope it helps
Thanks
回答3:
maybe this:
[NSPredicate predicateWithFormat:@"UPC MATCHES[cd] %@ OR ItemID MATCHES[cd] %@",aUPCCode,aUPCCode];
来源:https://stackoverflow.com/questions/7546496/case-insensitive-nspredicate-with-single-result-in-coredata