如何防止用户在文本框中输入特殊字符
本文关键字:输入 特殊字符 文本 何防止 用户 | 更新日期: 2023-09-27 18:16:43
我需要验证一个文本框上的密码输入,我有几个要求来完成,以便允许创建用户配置文件,其中一个是拒绝注册,如果密码包含任何其他不同于数字和字母表的系统需要拒绝输入,我尝试的一切似乎都失败了。这就是我现在所站的位置:
private void BUT_Signup_Click(object sender, EventArgs e)
{
string allowedchar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
if (!(TXT_NewPassword.Text.ToString().Contains(allowedchar)))
MessageBox.Show("No special characters on the password are allowed");
你可以使用LINQ:
if (!TXT_NewPassword.Text.All(allowedchar.Contains))
{
// Not allowed char detected
}
另一个建议,其他人已经提到,但没有证明。
正则表达式也可以实现这一点。
private void button1_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(textBox1.Text))
{
MessageBox.Show("Invalid password. Password cannot be empty.");
return;
}
System.Text.RegularExpressions.Regex regex = null;
regex = new System.Text.RegularExpressions.Regex("^([a-zA-Z0-9])*$");
if (regex.IsMatch(textBox1.Text))
{
MessageBox.Show("Valid password.");
}
else
{
MessageBox.Show("Invalid password. Password cannot contain any special characters.");
}
}
这将总是失败,因为您告诉它如果包含的字符都不有效就会失败。你想要的不是你的。contains (allowedchar),而是像…
if( TXT_NewPassword.Text.ToString().Any(ch => bannedChars.Contains(ch)))
{
MessageBox.Show("No special blah blah blah");
}
bannedChars是所有不允许的字符的集合。它将遍历密码中的每个字符,并在bannedChars列表中显示消息框。
你可能可以用Regex做一些更整洁的事情,但我不想再花一整天的时间去研究Regex是如何工作的,所以这是你能从我这里得到的最好的。
您正在测试密码是否包含整个 allowedchar
字符串。您必须反过来做,您需要测试密码中的每个字符是否包含在allowedchars中。
下面是带有解决方案思想的伪代码(不是c#,但希望你能意识到你需要做什么):
String password = myTextbox.Text;
foreach ( Char s in password )
if ( !allowedchar.contains(s) )
MessageBox.Show("No special characters on the password are allowed");
为什么不控制这个呢?
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Back || !allowedChar.Any(chr => chr == e.KeyChar))
{
e.Handled = true;
return;
}
e.Handled = false;
}
又一个建议…
更新:理论上,这现在可以处理用户传递他们想要的密码,但现在包括上面的首选答案。发生一次将比这种方法发生在每次KeyPress更有效。