iOS6无法检查仅包含字母数字字符的字符串

iOS6无法检查仅包含字母数字字符的字符串,ios,objective-c,string,unicode,Ios,Objective C,String,Unicode,我使用此代码检查iOS6中的用户输入字符串是否仅包含字母数字字符: NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet]; NSString *trimmedString = [text stringByTrimmingCharactersInSet:alphaSet]; BOOL valid = [trimmedString isEqualToString:@""]; 但运行这段代码的结果如下: 请注意,文

我使用此代码检查iOS6中的用户输入字符串是否仅包含字母数字字符:

NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
NSString *trimmedString = [text stringByTrimmingCharactersInSet:alphaSet];
BOOL valid = [trimmedString isEqualToString:@""];
但运行这段代码的结果如下:

请注意,
文本
(要检查的字符串)仅包含中文字符,但经过
字母集
修剪后,它将成为空字符串并通过验证

我也尝试过此代码,但它也不起作用:

- (BOOL) isAlphaNumeric: (NSString *) text
{
    NSCharacterSet *unwantedCharacters =
    [[NSCharacterSet alphanumericCharacterSet] invertedSet];

    return ([text rangeOfCharacterFromSet:unwantedCharacters].location == NSNotFound) ? YES : NO;
}
我不知道我哪里做错了。在检查之前,是否需要对输入文本进行编码

目前,我直接从iOS6的
-(BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text
的最后一个
replacementText
参数获取字符串


谢谢

问题在于
字母数字字符集
似乎也包含中文字母,因此结果是“正确的”。苹果公司并没有这样记录,但我看到一些帖子(比如GNUStep)似乎表明了这一点。(还请注意,Apple确实记录了此集合包含您可能不想要的字符:非正式地说,此集合是用作字母表、音节、表意文字和数字基本单位的所有字符的集合。)

一个简单但不雅观的解决方法是自己定义字符集,如果您只需要英文字母表,而不需要任何外来字母,如
Ü
ß

NSCharacterSet *alphaSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890"];
当您将iOS>=7作为目标时,可能会对其中一个
URL*AllowedCharacterSet
感兴趣。有关详细信息,请参阅