我必须检查NSString
中是否存在俄语字符。
我正在使用以下代码:
NSCharacterSet * set =
[[NSCharacterSet characterSetWithCharactersInString:@"БГДЁЖИЙЛПФХЦЧШЩЪЫЭЮЯ"]
invertedSet];
BOOL check = ([nameValue rangeOfCharacterFromSet:set].location == NSNotFound);
return check;
但它总是返回FALSE
。
有人能让我知道我的代码有什么问题吗?
由于
答案 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>