2012-09-02 11 views
6

私は、ロシア語の文字がNSStringに存在するかどうかチェックする必要があります。NSStringでロシア語の文字を見つける

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

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

return check; 

をしかし、それは常にFALSEを返して:

私はそのために以下のコードを使用しています。

誰でも私のコードで何が間違っていると思いますか?

おかげ

+0

二重否定はオーバーヘッドのビットです... –

+3

H2CO3 @二重否定はロシア語で一般的であること:) – dasblinkenlight

+0

@Rachitロシア語のアルファベットにはいくつかの文字がありません:А、В、К、М、Н、О、Р、С、Т – Shmidt

答えて

3

は現在、その非ロシア(技術的には、非キリル文字)文字あなたの状態のチェックはキリル文字が文字列内に存在しているではないことを、文字列は存在しません。あなたのコードは、完全にキリル文字から構成され、ラテンアルファベットの数字がでない文字列の場合にのみ、YESを返します。

はこのように、この問題を解決反転を削除し、チェックを反転するには、次の

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

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


あなたはあなたのリストにあるソフトストップ Ьを含めるのを忘れている、それがどのように見えます小文字の bが、同じ文字ではありません。

+0

ありがとうございました! – Rachit

+0

@Shmidtそれは間違った編集であった:OPは意図的にラテン文字に似ているすべてのロシア語の文字を誤って除外した。 – dasblinkenlight

+0

@dasblinkenlight私は目的についてテキストに何も見なかったので、間違いだと思う - ロシア語の文字の中にはラテン語のように見えるものもあるが、それはラテン語ではない。ポストの主題はロシア語についてしか述べていないので、一部のユーザーはこの回答と混同することがあります。とにかく私はそれらのために自分自身を作成し​​ました。 – Shmidt

4

私はdasblinkenlightの答えを使用するが、私は小文字を含む完全なロシア語のアルファベットが含まれていました。

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