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

时间:2015-10-08 14:12:20

标签: c# winforms textbox special-characters

我需要验证文本框上的密码条目,我有一些要求填写,以便允许创建用户配置文件,其中一个是拒绝注册,如果密码包含不同于数字的其他内容和系统需要拒绝输入的字母,我尝试的一切似乎都失败了。 我现在正站在这里:

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

4 个答案:

答案 0 :(得分:5)

您可以使用LINQ:

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

答案 1 :(得分:1)

其他人提到的另一个建议,但没有证明。

正则表达式也可以实现这一点。

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

答案 2 :(得分:0)

您正在测试密码是否包含 整个 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");

答案 3 :(得分:0)

这将永远失败,因为如果所包含的字符都不有效,您将告诉它失败。你想要的不是你的.Contains(allowedchar)就像是......

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

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

你可以做一些与Regex更合适的事情,但我不想整天看看Regex如何再次运作,所以这是你从我这里得到的最好的。