web-dev-qa-db-ja.com

大文字と小文字を区別しない比較NSString

誰かがObjective Cの大文字と小文字を区別しない比較に関するリソースを教えてもらえますか? str1.equalsIgnoreCase(str2)と同等のメソッドがないようです

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

ドキュメントは 検索および比較方法 にあります

545
Jason Coco
 NSString *stringA;
 NSString *stringB;

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

注:stringA &&が必要な理由は、stringAnilの場合:

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

したがって、NSOrderedSame0として定義されます。

次の例は、典型的な落とし穴です。

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

大文字と小文字を区別しないだけでなく、より多くの制御が必要な場合の代替策は次のとおりです。

[someString compare:otherString options:NSCaseInsensitiveSearch];

数値検索と発音区別の区別は、2つの便利なオプションです。

46
drawnonward

比較する前に、常に同じケースであることを確認できます。

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

主な利点は、nil文字列の比較に関してmatmで説明されている潜在的な問題を回避できることです。 compare:options:メソッドのいずれかを実行する前に文字列がnilでないことを確認するか、(私のように)怠zyで各比較の新しい文字列を作成する追加コストを無視することができます(実行している場合は最小限です) 1つまたは2つの比較)。

22
chrysAllwood

これを行う新しい方法。 iOS 8

let string: NSString = "Café"
let substring: NSString = "É"

string.localizedCaseInsensitiveContainsString(substring) // true
7
iGo
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
7
WhirlWind

この方法を試してください

- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
6
Reena

Jason Cocoの答えをSwiftに変換して、非常に怠け者に:)

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

iPhoneのContactAppのようにプレフィックスで確認する

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

this ブログは私にとって有用でした

5
iMeMyself

Swiftの代替ソリューション:

両方のUpperCaseを作成するには:

例えば:

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

またはLowerCase:の両方を作成するには

例えば:

if ("ABcd".lowercased() == "abcD".lowercased()){
}
1
FARAZ

MacOSでは、単に-[NSString isCaseInsensitiveLike:]を使用できます。これは-isEqual:と同様にBOOLを返します。

if ([@"Test" isCaseInsensitiveLike: @"test"])
    // Success
0
mangerlahn