我使用此代码检查用户输入字符串是否仅包含iOS6中的字母数字字符:
NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
NSString *trimmedString = [text stringByTrimmingCharactersInSet:alphaSet];
BOOL valid = [trimmedString isEqualToString:@""];
但这是运行这段代码的结果:
请注意,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
参数中获取字符串。
谢谢!
答案 0 :(得分:2)
问题是alphanumericCharacterSet
似乎也包含中文字母,因此结果是"正确"。 Apple并没有以这种方式记录它,但我看到了一些似乎表明它的帖子(例如来自GNUStep)。 (另请注意,Apple 文档表明此集合包含您可能不需要的字符:非正式地,此集合是用作字母,音节,表意文字和基本单位的所有字符的集合。位数。)。
一个简单但不优雅的解决方法是自己定义字符集,如果你想要的只是英文字母而没有任何外来字母,如Ü
或ß
:
NSCharacterSet *alphaSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890"];
当您定位iOS> = 7时,URL*AllowedCharacterSet
之一可能会引起您的兴趣。有关详细信息,请参阅NSCharacterSet documentation。