【问题标题】:iOS6 failed to check string contains only alpha-numeric charsiOS6 无法检查字符串仅包含字母数字字符
【发布时间】:2014-10-01 18:04:12
【问题描述】:

我正在使用此代码检查用户输入字符串是否在 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参数中获取字符串。

谢谢!

【问题讨论】:

    标签: ios objective-c string unicode


    【解决方案1】:

    问题是alphanumericCharacterSet 似乎也包含中文字母,所以结果是“正确的”。 Apple 没有以这种方式记录它,但我看到一些帖子(例如来自 GNUStep)似乎表明了这一点。 (另请注意,Apple 确实 证明该集合包含您可能不想要的字符:非正式地说,该集合是用作字母、音节、表意文字和数字。)。

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

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

    当您的目标是 iOS >= 7 时,URL*AllowedCharacterSet 之一可能会引起您的兴趣。详情请见NSCharacterSet documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      相关资源
      最近更新 更多