【问题标题】:Check if the entered text uses only English letters检查输入的文本是否仅使用英文字母
【发布时间】:2010-01-06 13:42:18
【问题描述】:

我正在开发一个 iPhone 应用程序,需要确保输入的文本仅由 a 到 z 和数字组成。

我不希望用户使用其他语言的字母,例如上面带有重音符号或点的字母。

编辑:我是这个 RegEx 的新手,所以如果你能给我一个代码或链接,我将非常感激。

【问题讨论】:

  • 你也允许标点符号吗?

标签: iphone sdk alphanumeric


【解决方案1】:

使用正则表达式,例如[0-9a-zA-Z]+。查看用于 Objective C 的 RegexKit Framework,这是一个适用于 iPhone 的正则表达式库。

然后您可以执行以下操作:

NSString *str = @"abc0129yourcontent";
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"];

【讨论】:

    【解决方案2】:

    另一种方法(可能不像 RegEx 那样优雅):

        NSCharacterSet* tSet = [NSCharacterSet characterSetWithCharactersInString:
                   @"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
        NSCharacterSet* invSet = [tSet invertedSet];
        NSString* legalS = @"abcdA1";
        NSString* illegalS = @"asvéq1";
    
        if ([legalS rangeOfCharacterFromSet:invSet].location != NSNotFound)
            NSLog(legalS); // not printed
    
        if ([illegalS rangeOfCharacterFromSet:invSet].location != NSNotFound)
            NSLog(illegalS); // printed
    

    【讨论】:

    • 我也喜欢这个解决方案。谢谢
    【解决方案3】:

    最简单的方法——假设你也想允许标点符号是检查所有字符是否在 ascii 值 32(空格)和 126(~)之间。 ASCII table 说明了这一点。

    所有重音字符都是我们刚开始编程时所说的“高”ascii。

    如果您不想允许标点符号,则必须进行多次范围检查:

    48 到 57 的数字

    65 到 90 表示大写

    97 到 122 为小写

    这可能会使 RegEx 方法更具可读性(我不敢相信我刚刚写了那个)

    【讨论】:

      【解决方案4】:

      易于实现(从上面获取,仅为快速复制粘贴而编辑):

      目标-C:

      BOOL onlyEnglishAlphanumerical = ([self.textField.text rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet]].location == NSNotFound);
      self.textField.layer.borderWidth = (onlyEnglishAlphanumerical) ? 0 : 1;
      if (onlyEnglishAlphanumerical)
      {
          //Do the deal
      }
      

      斯威夫特:

      if (self.textField.text.rangeOfCharacterFromSet(NSCharacterSet.init(charactersInString:"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet) == nil)
      {
          //Do the deal
      }
      

      【讨论】:

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