34

My question is similar to How do I check if a string contains another string in Objective-C?

How can I check if a string (NSString) contains another smaller string but with ignoring case?

NSString *string = @"hello bla bla";

I was hoping for something like:

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

Anyway is there any way to find if a string contains another string with ignore case ? But please do not convert both strings to UpperCase or to LowerCase.

2
  • i am sorry but it is confusing me..!! Commented Feb 13, 2012 at 10:09
  • Why don't you want to do it by converting both strings to lowercase / uppercase? That would be the best way to do it or use NSRegularExpression. Commented Feb 13, 2012 at 10:11

6 Answers 6

87

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!");
}
Sign up to request clarification or add additional context in comments.

Comments

17

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");
}

Comments

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

Comments

0

The method

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

should help you.

Comments

0

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.

Comments

0

For Swift 4:

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

Usage:

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

Output:

true

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.