检查字符是否为字母,不包括像á这样的特殊字符。

20
我想检查一个字符串是否只包含正确的字母。我用 Char.IsLetter 来实现这个功能。我的问题是,当有像 é 或者 á 这样的字符时,它们也被认为是正确的字母,而事实上它们不应该是。
有没有一种可能性可以检查一个字母作为 A-Z 或 a-z 中的正确字母,而不带有像 á 这样的特殊字母呢?

我必须导出一个文件,并将其导入到另一个应用程序中,如果有像é这样的特殊符号,则会引发错误。 - abc
8
当然,é或á是字母。 - leppie
1
我不知道为什么它们不是字母,但你可以将它们强制转换回ASCII码,就像这个问题中所示。 - Alexander
7个回答

31
bool IsEnglishLetter(char c)
{
    return (c>='A' && c<='Z') || (c>='a' && c<='z');
}

你可以将它作为扩展方法:

static bool IsEnglishLetter(this char c) ...

12
你可以使用 Char.IsLetter(c) && c < 128。或者只使用c < 128,这似乎最符合你的问题。
但是通过过滤字符来解决编码问题。要确切了解其他应用程序的理解,请进行调查。
可能你应该只需使用 Encoding.GetEncoding(someCodePage) 来编写。

2
c < 128 单独使用将返回非字母字符。 - Anthony Nichols

7

您可以使用正则表达式\w[a-zA-Z]进行匹配。


我认为第二个更好,第一个也可能接受带重音的字符。 - zmbq
不是100%确定,但我记得它不会。我曾经遇到过一些麻烦。例如,\w不会匹配挪威的符号。有一种方法可以启用Unicode:http://www.regular-expressions.info/unicode.html,但我没有尝试过。 - Sly
2
我也不确定。既然我们都确信[a-zA-Z]会起作用,而且任何阅读代码的人也会这样认为,那就更好了。 - zmbq

4

3
C# 9.0 中,您可以使用模式匹配增强功能
public static bool IsLetter(this char c) =>
    c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';

2
// 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);

-3

使用Linq进行简单访问:

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

5
嗯?原帖明确指出Char.IsLetter不能完成所需功能。 - Jim Balter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接