我想检查一个字符串是否只包含正确的字母。我用了Char.IsLetter。我的问题是,当有像é或á这样的字符时,它们也被认为是正确的字母,而这是不应该的。是否有可能检查字符是否为正确的字母A-Z或a-z,而没有像á这样的特殊字母?
Char.IsLetter
gzszwxb41#
bool IsEnglishLetter(char c) { return (c>='A' && c<='Z') || (c>='a' && c<='z'); }
您可以将其作为扩展方法:
static bool IsEnglishLetter(this char c) ...
ct2axkht2#
您可以使用Char.IsLetter(c) && c < 128。或者仅使用c < 128本身,这似乎最符合您的问题。但是您通过过滤字符来解决Encoding问题。请调查其他应用程序确切理解的内容。可能你应该用Encoding.GetEncoding(someCodePage)来写。
Char.IsLetter(c) && c < 128
c < 128
Encoding.GetEncoding(someCodePage)
mzmfm0qo3#
可以使用正则表达式\w或[a-zA-Z]
\w
[a-zA-Z]
gwbalxhn4#
// 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);
wmomyfyw5#
在C# 9.0中,您可以使用模式匹配增强功能。
C# 9.0
public static bool IsLetter(this char c) => c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
mlnl4t2r6#
从.NET 7开始,有一个Char.IsAsciiLetter函数可以完全满足要求https://learn.microsoft.com/en-za/dotnet/api/system.char.isasciiletter?view=net-7.0
Char.IsAsciiLetter
qhhrdooz7#
使用Linq可轻松访问:
if (yourString.All(char.IsLetter)) { //just letters are accepted. }
7条答案
按热度按时间gzszwxb41#
您可以将其作为扩展方法:
ct2axkht2#
您可以使用
Char.IsLetter(c) && c < 128
。或者仅使用c < 128
本身,这似乎最符合您的问题。但是您通过过滤字符来解决Encoding问题。请调查其他应用程序确切理解的内容。
可能你应该用
Encoding.GetEncoding(someCodePage)
来写。mzmfm0qo3#
可以使用正则表达式
\w
或[a-zA-Z]
gwbalxhn4#
wmomyfyw5#
在
C# 9.0
中,您可以使用模式匹配增强功能。mlnl4t2r6#
从.NET 7开始,有一个
Char.IsAsciiLetter
函数可以完全满足要求https://learn.microsoft.com/en-za/dotnet/api/system.char.isasciiletter?view=net-7.0
qhhrdooz7#
使用Linq可轻松访问: