【问题标题】:check if char isletter检查字符是否是字母
【发布时间】:2012-04-02 11:33:01
【问题描述】:

我想检查一个字符串是否只包含正确的字母。 我为此使用了Char.IsLetter。 我的问题是,当有像 é 或 á 这样的字符时,它们也被认为是正确的字母,这不应该是。

是否有可能将字符检查为正确的字母 A-Z 或 a-z 而没有像 á 这样的特殊字母?

【问题讨论】:

  • 我必须导出一个文件,然后将其导入另一个应用程序,如果有特殊符号如 é,...
  • 当然 é 或 á 是字母...
  • 我不知道为什么它们不会是字母,但你可以强制它们回到 ascii,如this question

标签: c# .net char


【解决方案1】:
bool IsEnglishLetter(char c)
{
    return (c>='A' && c<='Z') || (c>='a' && c<='z');
}

您可以将此作为扩展方法:

static bool IsEnglishLetter(this char c) ...

【讨论】:

    【解决方案2】:

    您可以使用 Char.IsLetter(c) &amp;&amp; c &lt; 128 。或者只是 c &lt; 128 本身,这似乎最符合您的问题。

    但您正在通过过滤字符来解决编码问题。一定要调查其他应用程序完全理解的内容。

    您可能应该只使用Encoding.GetEncoding(someCodePage) 写作。

    【讨论】:

    • c
    【解决方案3】:

    您可以使用正则表达式\w[a-zA-Z]

    【讨论】:

    • 我认为第二个更好,第一个也可以接受重音字符。
    • 不是 100% 肯定,但我记得不会。我遇到了一些麻烦。 \w 与挪威的符号不匹配。有一种启用 unicode 的方法:regular-expressions.info/unicode.html 但我还没有尝试过。
    • 我也不确定。既然我们都确信 [a-zA-Z] 会起作用,而且任何阅读代码的人都肯定会起作用,那就更好了。
    【解决方案4】:
    // Create the regular expression
    string pattern = @"^[a-zA-Z]+$";
    Regex regex = new Regex(pattern);
    
    // Compare a string against the regular expression
    return regex.IsMatch(stringToTest);
    

    【讨论】:

      【解决方案5】:

      C# 9.0 中,您可以使用pattern matching enhancements

      public static bool IsLetter(this char c) =>
          c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
      

      【讨论】:

        【解决方案6】:

        使用 Linq 轻松访问:

        if (yourString.All(char.IsLetter))
        {
            //just letters are accepted.
        }
        

        【讨论】:

        • 嗯? OP 明确指出 Char.IsLetter 没有做需要做的事情。
        猜你喜欢
        • 2011-07-07
        • 2013-04-01
        • 2012-04-23
        • 2014-08-03
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多