iPhone: find one string in another with case insensetive

淺唱寂寞╮ 提交于 2019-12-03 09:29:20

As similar to the answer provided in the link, but use options.

See - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask in Apple doc

NSString *string = @"hello bla bla";

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

From iOS 8 you can add the containsString: or localizedCaseInsensitiveContainsString method to NSString.

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

The method

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

should help you.

You can use -(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask; to get a range for a substring, the mask parameter is used to specify case insensitive match.

Example :

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

As stated in the documentation, the method returns a range like {NSNotFound, 0} when the substring isn't found.

BOOL b = r.location == NSNotFound;

Important this method raises an exception if the string is nil.

Updated Answer for Swift 4

extension String 
{
    func containsCaseInsensitive(string : String) -> Bool {
            return self.localizedCaseInsensitiveContains(string)
     }
}

Usage:

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

Output:

true

Hope it helps. Happy Coding.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!