文本框可以包含字母,但不允许包含数字
本文关键字:不允许 包含 数字 包含字 文本 | 更新日期: 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的,你应该做客户端。