2012-09-02 5 views
6

Devo controllare se un carattere russo è presente in un NSString oppure no.Ricerca di un carattere russo in NSString

Sto usando il seguente codice per questo:

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

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

return check; 

ma è sempre di ritorno FALSE.

Qualcuno può darmi un'idea di cosa c'è di sbagliato nel mio codice?

Grazie

+0

Quella doppia negazione è un po' di un overhead ... –

+3

@ H2CO3 doppia negazione è comune in lingua russa :) – dasblinkenlight

+0

@Rachit Vedo che alcuni caratteri mancano dall'alfabeto russo: А, В, К, М, Н, О, Р, С, Т – Shmidt

risposta

3

Attualmente, i vostri assegni condizione che non russo (tecnicamente, non cirillico) caratteri sono assenti dalla stringa, senza che i caratteri cirillici sono presenti nella stringa. Il codice restituirà YES solo per le stringhe composte interamente da caratteri cirillici che non hanno un carattere equivalente nell'alfabeto latino .

per risolvere questo problema, rimuovere l'inversione, ed invertire il controllo, in questo modo:

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

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


Hai dimenticato di includere l'arresto dolce Ь nella vostra lista, sembra un minuscolo b, ma non è lo stesso carattere.

+0

Grazie mille per il tuo aiuto! – Rachit

+0

@Shmidt Era una modifica errata: l'OP escludeva tutti i caratteri russi che somigliano ai caratteri latini di proposito, non per errore. – dasblinkenlight

+0

@dasblinkenlight Non ho visto nulla di testo sullo scopo, quindi penso che sia stato un errore - alcuni caratteri russi sembrano in latino ma non in latino. Oggetto del post dice solo di russo, quindi alcuni utenti possono essere confusi con questa risposta. Comunque ho creato il mio per loro. – Shmidt

4

ho usato dasblinkenlight 's risposta, ma ho incluso piena alfabeto russo tra cui i caratteri minuscoli:

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