2012-09-02 16 views
6

Tengo que verificar si un personaje ruso está presente en un NSString o no.Encontrar un carácter ruso en NSString

estoy usando el siguiente código para que:

NSCharacterSet * set = 
[[NSCharacterSet characterSetWithCharactersInString:@"БГДЁЖИЙЛПФХЦЧШЩЪЫЭЮЯ"] 
    invertedSet]; 

BOOL check = ([nameValue rangeOfCharacterFromSet:set].location == NSNotFound); 

return check; 

Pero siempre regresa FALSE.

¿Alguien puede darme una idea de lo que está mal en mi código?

Gracias

+0

Esa doble negación es un poco de una sobrecarga ... –

+3

@ H2CO3 doble negación es un lugar común en la lengua rusa :) – dasblinkenlight

+0

@Rachit Veo que faltan algunos caracteres en el alfabeto ruso: А, В, К, М, Н, О, Р, С, Т – Shmidt

Respuesta

3

Actualmente, su condición cheques que no ruso (técnicamente, no cirílico) personajes están ausentes de la cadena, no es que los caracteres cirílicos están presentes en la cadena. Su código devolverá YES solo para cadenas compuestas completamente de caracteres cirílicos que no tengan un carácter equivalente en el alfabeto latino .

Para solucionar este problema, quite la inversión, e invertir el cheque, así:

NSCharacterSet * set = [NSCharacterSet characterSetWithCharactersInString:@"БГДЁЖИЙЛПФХЦЧШЩЪЫЬЭЮЯ"]; 

return [nameValue rangeOfCharacterFromSet:set].location != NSNotFound; 


Se ha olvidado de incluir la parada suave Ь en su lista, se ve como una minúscula b, pero no es el mismo personaje.

+0

¡Muchas gracias por su ayuda! – Rachit

+0

@Shmidt Esa fue una edición incorrecta: el OP excluía todos los caracteres rusos que se parecen a los caracteres latinos a propósito, no por error. – dasblinkenlight

+0

@dasblinkenlight No vi nada en el texto sobre el propósito, así que creo que fue un error: algunos caracteres rusos se parecen al latín pero no al latín. El tema de la publicación solo dice sobre ruso, por lo que algunos usuarios pueden confundirse con esta respuesta. De todos modos, creé el mío para ellos. – Shmidt

4

que utilizan dasblinkenlight 's respuesta, pero incluyó completo alfabeto ruso incluyendo los caracteres en minúsculas:

@interface NSString (Russian) 
- (BOOL)hasRussianCharacters; 
@end 
@implementation NSString (Russian) 
- (BOOL)hasRussianCharacters{ 
    NSCharacterSet * set = [NSCharacterSet characterSetWithCharactersInString:@"абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"]; 
    return [self rangeOfCharacterFromSet:set].location != NSNotFound; 
} 
@end 
Cuestiones relacionadas