如何验证字符串是否为英文?

bas*_*vas 24 c# string character-encoding

我从控制台读取一个字符串.如何确保它只包含英文字符和数字?

LBu*_*kin 29

假设通过"英文字符"你只是指26个字符的拉丁字母,这将是我将使用正则表达式的区域: ^[a-zA-Z0-9 ]*$

例如:

if( Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$") )
{ /* your code */ }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,正则表达式的好处在于,您真正关心的是字符串是否与模式匹配 - 这是正则表达式非常有效的方法.它清楚地捕捉了你的意图,如果你对"英文字符"的定义超出了26个字母,那么它很容易扩展.

这里有一系列不错的文章可以更多地讲述正则表达式.

JørnSchou-Rode的答案提供了一个很好的解释,说明这里呈现的正则表达式如何与您的输入相匹配.

  • 这个错误的答案错误地将ASCII等同于"英语".这是非常错误的 - 正如这条评论明确地证明的那样. (5认同)
  • 您可能还想包含空白区域; 对于给定的正则表达式模式,"ab c"返回false. (4认同)
  • ......和标点符号 (2认同)
  • 那些花哨的标点字符如省略号字符(...)或撇号?它们有自己的unicode字符. (2认同)

Jør*_*ode 16

您可以将它与此正则表达式匹配: ^[a-zA-Z0-9]*$

  • ^ 匹配字符串的开头(即在此点之前不允许任何字符)
  • [a-zA-Z0-9] 匹配来自az的大写或小写的任何字母,以及数字0-9
  • * 让前一个匹配重复零次或多次
  • $ 匹配字符串的结尾(即此点后不允许使用任何字符)

要在C#程序中使用表达式,您需要System.Text.RegularExpressions在代码中导入并执行以下操作:

bool match = Regex.IsMatch(input, "^[a-zA-Z0-9]*$");
Run Code Online (Sandbox Code Playgroud)

如果要针对模式测试很多行,可能需要编译表达式:

Regex pattern = new Regex("^[a-zA-Z0-9]*$", RegexOptions.Compiled);

for (int i = 0; i < 1000; i++)
{
    string input = Console.ReadLine();
    pattern.IsMatch(input);
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果输入字符串包含空格,则此模式将返回false. (4认同)

ᔕIᑎ*_*ᑎᗪI 5

另一种方法是检查IsLowerIsUpper两者是否不返回 true。就像是:

\n
private bool IsAllCharEnglish(string Input)\n{\n foreach (var item in Input.ToCharArray())\n {\n  if (!char.IsLower(item) && !char.IsUpper(item) && !char.IsDigit(item) && !char.IsWhiteSpace(item))\n  {\n      return false;\n  }\n }\n return true;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

并使用它:

\n
string str = "\xd9\x81\xd8\xa7\xd8\xb1\xd8\xb3\xdb\x8c abc";\nIsAllCharEnglish(str); // return false\n\nstr = "These are english 123";\nIsAllCharEnglish(str); // return true\n
Run Code Online (Sandbox Code Playgroud)\n


Far*_*nzi 5

接受的答案不适用于空格或标点符号。以下代码针对此输入进行了测试:

你好: 1. - 一个; b/c \ _(5)??
是英文

Regex regex = new Regex("^[a-zA-Z0-9. -_?]*$");


string text1 = "????";
bool fls = regex.IsMatch(text1);   //false

string text2 = "123 abc! ?? -_)(/\\;:";
bool tru = regex.IsMatch(text2);  //true
Run Code Online (Sandbox Code Playgroud)