iOS6无法检查字符串是否只包含字母数字字符

时间:2014-08-08 09:41:50

标签: ios objective-c string unicode

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

NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
NSString *trimmedString = [text stringByTrimmingCharactersInSet:alphaSet];
BOOL valid = [trimmedString isEqualToString:@""];

但这是运行这段代码的结果:

enter image description here

请注意,text(要检查的字符串)仅包含中文字符,但在alphaSet修剪后,它变为空字符串并通过验证。

我也尝试过这段代码,它也无法正常工作:

- (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参数中获取字符串。

谢谢!

1 个答案:

答案 0 :(得分:2)

问题是alphanumericCharacterSet似乎也包含中文字母,因此结果是"正确"。 Apple并没有以这种方式记录它,但我看到了一些似乎表明它的帖子(例如来自GNUStep)。 (另请注意,Apple 文档表明此集合包含您可能不需要的字符:非正式地,此集合是用作字母,音节,表意文字和基本单位的所有字符的集合。位数。)。

一个简单但不优雅的解决方法是自己定义字符集,如果你想要的只是英文字母而没有任何外来字母,如Üß

NSCharacterSet *alphaSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890"];

当您定位iOS> = 7时,URL*AllowedCharacterSet之一可能会引起您的兴趣。有关详细信息,请参阅NSCharacterSet documentation