How to prevent users from typing special characters in textbox
本问题已经有最佳答案,请猛点这里访问。
我需要在一个文本框中验证一个密码条目,我有一些要求需要完全填写以允许创建用户配置文件,其中之一是拒绝注册,如果密码包含的不是数字和字母,系统需要拒绝该条目,我尝试的一切似乎都失败了。我现在站在这里:
1 2 3 4 5 6 | 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:
1 2 3 4 | if (!TXT_NewPassword.Text.All(allowedchar.Contains)) { // Not allowed char detected } |
其他人提到但未证明的另一个建议。
正则表达式也可以实现这一点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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."); } } |
为什么不控制这个而不是事后检查呢?
1 2 3 4 5 6 7 8 9 10 | 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; } |
只是另一个建议……
更新:
理论上,这现在可以处理用户传递他们想要的密码,但现在包括上面的首选答案。一旦出现这种情况,每按一次键都会比这种方法更有效。
这将永远失败,因为如果包含的所有字符都无效,您将告诉它失败。你想要的,而不是你的.contains(allowedchar)就像…
1 2 3 4 | if( TXT_NewPassword.Text.ToString().Any(ch => bannedChars.Contains(ch))) { MessageBox.Show("No special blah blah blah"); } |
其中bannedchars是所有不允许使用的字符的集合。这将遍历密码中的每个字符,如果其中任何字符在BannedChars列表中,则显示消息框。
你也许可以用regex做些更整洁的事情,但我不想花一整天的时间再去寻找regex的工作原理,所以这是你从我这里得到的最好的结果。
您正在测试密码是否包含整个
下面是带解决方案想法的伪代码(不是C,但希望您能意识到您需要做什么):
1 2 3 4 | String password = myTextbox.Text; foreach ( Char s in password ) if ( !allowedchar.contains(s) ) MessageBox.Show("No special characters on the password are allowed"); |