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

本文关键字:不允许 包含 数字 包含字 文本 | 更新日期: 2023-09-27 18:15:24

我想创建一个文本框,你可以输入你的名字。如果文本框为空,则显示错误。如果文本框中包含数字,则显示错误。

在我的样本中,当我有空文本框和当我有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 = "";
        }
    }
}

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

我想我只是必须添加break;

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

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

// 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 = "";
    }
}

在文本中的每个字符上使用循环。你总是覆盖label5.Text。所以实际上只有最后一个字符在你的逻辑中起作用。

你可以这样写:

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;
    }
}

您可以这样做:

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

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