不区分大小写比较NSString

任何人都可以指向任何关于Objective C中不区分大小写的比较资源吗? 它似乎没有一个等效的方法str1.equalsIgnoreCase(str2)

 if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) { // strings are equal except for possibly case } 

该文档位于search和比较方法

如果您希望更多的控制,而不是大小写不敏感的替代scheme是:

 [someString compare:otherString options:NSCaseInsensitiveSearch]; 

数字search和变音不敏感是两个方便的select。

  NSString *stringA; NSString *stringB; if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) { // match } 

注意: stringA &&是必需的,因为当stringAstringA

  stringA = nil; [stringA caseInsensitiveCompare:stringB] // return 0 

所以发生NSOrderedSame也被定义为0

以下示例是一个典型的陷阱:

  NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"]; if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) { // what happens if "Rank" is not found in standardUserDefaults } 

在比较之前,您可以始终确保它们处于同一个案例中:

 if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) { // They're equal } 

主要好处是避免了matm描述的比较零string的潜在问题。 你可以在执行compare:options:方法之前检查string是否为零,或者你可能是懒惰的(像我一样),并忽略为每个比较创build一个新的string的额外成本(如果你“只做一两个比较)。

 - (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString 

一个新的方法来做到这一点。 iOS 8

 let string: NSString = "Café" let substring: NSString = "É" string.localizedCaseInsensitiveContainsString(substring) // true 

试试这个方法

 - (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString 

如在iPhone ContactApp中检查前缀

 ([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0) 

这个博客对我很有用

把Jason Coco的答案转换成Swift深刻的懒惰:)

 if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame) { // Strings are equal. } 

swift的替代解决scheme:

为了使UpperCase:

例如:

 if ("ABcd".uppercased() == "abcD".uppercased()){ } 

或者使两个LowerCase:

例如:

 if ("ABcd".lowercased() == "abcD".lowercased()){ } 
 NSMutableArray *arrSearchData; NSArray *data=[arrNearByData objectAtIndex:i]; NSString *strValue=[NSString stringWithFormat:@"%@", [data valueForKey:@"restName"]]; NSRange r = [strValue rangeOfString:key options:NSCaseInsensitiveSearch]; if(r.location != NSNotFound) { [arrSearchData addObject:data]; }