C# 文本框可以包含字母,但不允许包含数字
我正在尝试创建文本框,您可以在其中输入您的姓名。 如果文本框为空,则显示错误。 如果文本框包含数字,则显示错误 在我的示例中,当我有空文本框和像Robert1这样的数字时,它确实显示错误。但当文本以字母结尾时,它不起作用。如果您编写了1Robert,那么它不会显示错误 我的代码:C# 文本框可以包含字母,但不允许包含数字,c#,C#,我正在尝试创建文本框,您可以在其中输入您的姓名。 如果文本框为空,则显示错误。 如果文本框包含数字,则显示错误 在我的示例中,当我有空文本框和像Robert1这样的数字时,它确实显示错误。但当文本以字母结尾时,它不起作用。如果您编写了1Robert,那么它不会显示错误 我的代码: string vards = textBox1.Text; // Empty or wrong format if (string.IsNullOrWhiteSpace(textBox1.Text)) {
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?也可以吗?它确实有效,但不知道它是否正确:是的,这解决了你的问题。你应该删除答案末尾的问题。