2012-02-13 4 views
23

Mi pregunta es similar a How do I check if a string contains another string in Objective-C?iPhone: encontrar una cadena en otra con el caso insensetive

¿Cómo puedo comprobar si una cadena (NSString) contiene otra cadena más pequeña, pero con ignorando mayúsculas y minúsculas?

NSString *string = @"hello bla bla"; 

que estaba esperando algo como:

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

De todos modos ¿hay alguna manera de saber si una cadena contiene otra cadena con ignorar caso? Pero no convierta ambas cadenas en UpperCase o LowerCase.

+0

lo siento pero me confunde ... !! – Sarah

+0

¿Por qué no quieres hacerlo al convertir ambas cadenas a minúsculas/mayúsculas? Esa sería la mejor manera de hacerlo o usar 'NSRegularExpression'. – mattjgalloway

Respuesta

75

Similar a la respuesta proporcionada en el enlace, pero use options.

Ver - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask en 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!"); 
} 
0

El método

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

debería ayudarle.

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

Puede utilizar -(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask; para obtener un rango de una subcadena, el parámetro mask se utiliza para especificar el caso insensible partido.

Ejemplo:

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

Como se indica en la documentation, el método devuelve un rango como {NSNotFound, 0} cuando no se encuentra la subcadena.

BOOL b = r.location == NSNotFound; 

Importante este método lanza una excepción si la cadena es nil.

4

Desde iOS 8 puede agregar el método containsString: o localizedCaseInsensitiveContainsString a NSString.

if ([string localizedCaseInsensitiveContainsString:@"BlA"]) { 
    NSLog(@"string contains Case Insensitive bla!"); 
} else { 
    NSLog(@"string does not contain bla"); 
} 
Cuestiones relacionadas