在NSString中查找俄语字符

时间:2012-09-02 10:41:28

标签: ios objective-c string nsstring string-matching

我必须检查NSString中是否存在俄语字符。

我正在使用以下代码:

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

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

return check;

但它总是返回FALSE

有人能让我知道我的代码有什么问题吗?

由于

2 个答案:

答案 0 :(得分:5)

我使用dasblinkenlight的答案,但我包括完整的俄语字母,包括小写字符:

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

答案 1 :(得分:3)

目前,您的条件检查字符串中是否缺少非俄语(技术上,非西里尔语)字符,而不是字符串中存在西里尔字符。您的代码将仅返回YES字符串,该字符串完全由西里尔字符组成,这些字符在拉丁字母 1 中没有等效字符。

要解决此问题,请删除反转,然后反转检查,如下所示:

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

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

<小时/> 1 您忘记在列表中包含软停止Ь,它看起来像一个小写的b,但它不是同一个字符。

< / p>