C# 文本框可以包含字母,但不允许包含数字

C# 文本框可以包含字母,但不允许包含数字,c#,C#,我正在尝试创建文本框,您可以在其中输入您的姓名。 如果文本框为空,则显示错误。 如果文本框包含数字,则显示错误 在我的示例中,当我有空文本框和像Robert1这样的数字时,它确实显示错误。但当文本以字母结尾时,它不起作用。如果您编写了1Robert,那么它不会显示错误 我的代码: string vards = textBox1.Text; // Empty or wrong format if (string.IsNullOrWhiteSpace(textBox1.Text)) {

我正在尝试创建文本框,您可以在其中输入您的姓名。 如果文本框为空,则显示错误。 如果文本框包含数字,则显示错误

在我的示例中,当我有空文本框和像Robert1这样的数字时,它确实显示错误。但当文本以字母结尾时,它不起作用。如果您编写了1Robert,那么它不会显示错误

我的代码:

string vards = textBox1.Text;

// Empty or wrong format

if (string.IsNullOrWhiteSpace(textBox1.Text))
    {
        label5.Text = "You didn't enter anything!";
    }
else
{
    foreach(char c in vards)
    {
        if (Char.IsNumber(c))
        {
            label5.Text = "Your name is incorrect!";
        }
        else
        {
            label5.Text = "";
        }
    }
}

我想我必须加上休息

            if (Char.IsNumber(c))
                    {
                        label5.Text = "Your name is incorrect!";
                        break;
                    }

您正在文本中的每个字符上使用循环。在这里,您将覆盖label5。始终为文本。所以实际上,在你的逻辑中,只有最后一个字符是重要的

您可以使用以下选项:

bool anyNumbers = textBox1.Text.Any(Char.IsDigit);
if(anyNumbers)
{
    label5.Text = "Your name is incorrect!";
}
这里没有LINQ:

bool valid = true;
foreach (char c in textBox1.Text)
{
    if (char.IsDigit(c))
    {
        valid = false;
        break;
    }
}

循环产生无效的结果。它将覆盖label1的每个字符的label5内容,最终结果仅与最后一个字符有关

// Empty or wrong format
if (string.IsNullOrWhiteSpace(textBox1.Text))
{
    label5.Text = "You didn't enter anything!";
}
else
{
    bool onlyLetters = textBox1.Text.All(x => Char.IsLetter(x));

    if (!onlyLetters)
    {
        label5.Text = "Your name is incorrect!";
    }
    else
    {
        label5.Text = "";
    }
}

您可以执行以下操作:

var input = txtExample.Text;
if(!string.IsNullOrEmpty(input))
     if(input.Any(d => char.IsDigit(d) == false)
     {
          // Valid
     }

实际上,您可以使用Linq,甚至不用foreach循环。请记住,这是在服务器端完成的,如果您在web应用程序中触发回发。您可能希望这样做,所以如果它是基于web的,您应该在客户端这样做。

如果我只添加break?也可以吗?它确实有效,但不知道它是否正确:是的,这解决了你的问题。你应该删除答案末尾的问题。