6

我必须检查 a 中是否存在俄罗斯字符NSString

我为此使用以下代码:

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

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

return check;

但它总是在回来FALSE

谁能告诉我我的代码有什么问题?

谢谢

4

2 回答 2

5

我使用dasblinkenlight了 's answer,但我包含了完整的俄语字母,包括小写字符:

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

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

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

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

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


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

于 2012-09-02T11:16:05.253 回答