【问题标题】:Simplest way to check for basic latin letter (A-Z)检查基本拉丁字母 (A-Z) 的最简单方法
【发布时间】:2012-02-23 08:46:55
【问题描述】:

也许我遗漏了一些明显的东西,但是除了转换为字符串并使用正则表达式之外,还有更简单的方法来检查字符是否是基本拉丁字母 (a-z)?:例如:

public static bool IsBasicLetter(Char c) {
    return Regex.IsMatch(c.ToString(), "[a-z]", RegexOptions.IgnoreCase);
}

Char.IsLetter 匹配来自许多字母的数百个字母字符。我可以直接检查代码点,但感觉很粗略:

public static bool IsBasicLetter(Char c) {
    int cInt = c;
    return !(cInt < 65 || cInt > 122 || (cInt > 90 & cInt < 97));
}

【问题讨论】:

    标签: c# validation char


    【解决方案1】:

    如果您使用字符文字,您的第二段代码看起来会好很多:

    public static bool IsBasicLetter(char c) {
        return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
    }
    

    【讨论】:

    • 这让我很吃惊。我会认为 A
    • @jmh_gr:字符只是 UTF-16 代码单元,在 ASCII 部分有非重音字符(即小于 U+0080)。
    【解决方案2】:

    这个怎么样?

    return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z');
    

    【讨论】:

    • 请注意,它不区分大小写。
    【解决方案3】:

    如果你想让它更复杂一点,比如 AZ 和其他几个字符的子集(即检查有效的 Base64 字符),请考虑对前 127 或 255 个字符使用布尔标志数组,并为你的字符使用 true希望在您的 IsBasicLetter 方法中允许。这是大多数库实际实现此类功能的方式。

    要了解更多 Unicode 友好的字符检查方法(显然超出了问题的范围),请查看 Char 类的方法,例如 IsLetterOrDigit,它检查所有可能的字母变体。

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 2014-03-05
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2013-05-08
      • 2016-05-19
      相关资源
      最近更新 更多