关于nsstring:iPhone:在不区分大小写的情况下在另一个字符串中找到一个字符串

iPhone: find one string in another with case insensetive

我的问题类似于如何在Objective-C中检查一个字符串是否包含另一个字符串?

如何检查字符串(nsstring)是否包含另一个较小的字符串,但忽略大小写?

1
NSString *string = @"hello bla bla";

我希望有这样的事情:

1
NSLog(@"%d",[string containsSubstring:@"BLA"]);

不管怎样,有没有办法找到一个字符串是否包含另一个大小写为ignore的字符串?但请不要将这两个字符串都转换为大写或小写。


与链接中提供的答案类似,但使用options

见苹果文档中的- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask

1
2
3
4
5
6
7
8
9
10
NSString *string = @"hello bla bla";

if ([string rangeOfString:@"BLA" options:NSCaseInsensitiveSearch].location == NSNotFound)
{
    NSLog(@"string does not contain bla");
}
else
{
    NSLog(@"string contains bla!");
}

从ios 8中,您可以将containsString:localizedCaseInsensitiveContainsString方法添加到nsstring。

1
2
3
4
5
if ([string localizedCaseInsensitiveContainsString:@"BlA"]) {
    NSLog(@"string contains Case Insensitive bla!");
} else {
    NSLog(@"string does not contain bla");
}


1
2
3
4
5
6
NSString *string = @"hello BLA";
if ([string rangeOfString:@"bla" options:NSCaseInsensitiveSearch].location == NSNotFound) {
    NSLog(@"string does not contain bla");
} else {
    NSLog(@"string contains bla!");
}

更新了Swift 4的答案

1
2
3
4
5
6
extension String
{
    func containsCaseInsensitive(string : String) -> Bool {
            return self.localizedCaseInsensitiveContains(string)
     }
}

用途:

1
print("Hello".containsCaseInsensitive(string:"LLO"))

输出:

希望它有帮助。快乐编码。


可以使用-(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;获取子字符串的范围,mask参数用于指定不区分大小写的匹配。

例子:

1
2
NSRange r = [str rangeOfString:@"BLA"
                       options:NSCaseInsensitiveSearch];

如文档中所述,当找不到子字符串时,该方法返回一个范围,如{NSNotFound, 0}

1
BOOL b = r.location == NSNotFound;

重要信息:如果字符串是nil,则此方法会引发异常。


方法

1
[string rangeOfString:@"bla" options:NSCaseInsensitiveSearch];

应该会帮你的。