如何防止用户在文本框中输入特殊字符

How to prevent users from typing special characters in textbox

我需要验证文本框上的密码输入,我有一些要求需要满足才能创建用户配置文件,其中之一是如果密码包含除数字之外的任何其他内容,则拒绝注册和系统需要拒绝输入的字母,我尝试的一切似乎都失败了。 这是我现在站的位置:

     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");

您正在测试密码是否包含 整个 allowedchar 字符串。你必须反过来做,你需要测试密码中的每个字符是否都包含在允许的字符中。

这是带有解决方案想法的伪代码(不是 C#,但希望您会意识到您需要做什么):

    String password = myTextbox.Text;
    foreach ( Char s in password ) 
        if ( !allowedchar.contains(s) )
            MessageBox.Show("No special characters on the password are allowed");

您可以使用 LINQ:

if (!TXT_NewPassword.Text.All(allowedchar.Contains))
{
    // Not allowed char detected
}

那总是会失败,因为如果 none 包含的字符有效,您就告诉它失败。你想要的而不是你的 .Contains(allowedchar) 是这样的......

if( TXT_NewPassword.Text.ToString().Any(ch => bannedChars.Contains(ch)))
{
   MessageBox.Show("No special blah blah blah");
}

bannedChars 是所有不允许的字符的集合。这将遍历密码中的每个字符并显示消息框,如果它们在 bannedChars 列表中。

您可能可以使用 Regex 做一些更简洁的事情,但我不想花一整天的时间来查看 Regex 是如何工作的,所以这是我能给您的最好的。

为什么不控制这个而不是事后检查?

    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 时更有效。

其他人提到但未证明的另一个建议。

正则表达式也可以做到这一点。

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.");
    }
}