C# 如何阻止或限制文本框中的特殊字符

C# 如何阻止或限制文本框中的特殊字符,c#,winforms,C#,Winforms,我需要从文本框中排除特殊字符(%,&,/,“,”等) 有可能吗?我应该使用按键事件吗 string one = radTextBoxControl1.Text.Replace("/", ""); string two = one.Replace("%", ""); //more string radTextBoxControl1.Text = two; 在这种模式下是非常非常长的=(您可以使用“文本

我需要从文本框中排除特殊字符(
%,&,/,“,”
等)

有可能吗?我应该使用按键事件吗

string one = radTextBoxControl1.Text.Replace("/", "");
                string two = one.Replace("%", "");
                //more string
                radTextBoxControl1.Text = two;

在这种模式下是非常非常长的=(

您可以使用“文本更改”事件(我相信(但不确定)这会在复制/粘贴时触发)

触发事件时,调用一个方法,例如PurgeTextOfEvilCharacters()

在这个方法中,有一个要“阻止”的字符数组。检查TextBox控件的.Text的每个字符,如果在数组中找到该字符,则不需要它。用“OK”字符重新生成字符串,就可以了


我打赌会有更好的方法,但这对我来说似乎没问题!

我假设您试图只保留字母数字和空格字符。添加这样的按键事件

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    var regex = new Regex(@"[^a-zA-Z0-9\s]");
    if (regex.IsMatch(e.KeyChar.ToString()))
    {
        e.Handled = true;
    }
}
您可以使用以下选项:

private void textBoxSample_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = !char.IsLetter(e.KeyChar) && !char.IsDigit(e.KeyChar);
    }
它阻止特殊字符,只接受int/数字和字符

最适合我的字符:

void textBoxSample_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = Char.IsPunctuation(e.KeyChar) ||  
                      Char.IsSeparator(e.KeyChar) || 
                      Char.IsSymbol(e.KeyChar);
    }

启用删除键和退格键…等将更有用。下面的代码只允许数字、字母、退格和空格

我加入VB.net是因为我必须处理一个棘手的转换

C#

VB.net

Private Sub textBoxSample_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textBoxSample.KeyPress
    e.Handled = e.KeyChar <> ChrW(Keys.Back) And Not Char.IsSeparator(e.KeyChar) And Not Char.IsLetter(e.KeyChar) And Not Char.IsDigit(e.KeyChar) 
End Sub
Private Sub textBoxSample\u KeyPress(发送者作为对象,e作为KeyPressEventArgs)处理textBoxSample.KeyPress
e、 Handled=e.KeyChar ChrW(key.Back)而不是Char.IsSeparator(e.KeyChar)而不是Char.IsLetter(e.KeyChar)而不是Char.IsDigit(e.KeyChar)
端接头

我们可以使用正则表达式验证器对其进行验证

ValidationExpression=“^[\sa-zA-Z0-9]*$”


另一种排除各种字符选择(如%,&,,,,a,b,2)的方法是在文本框按键事件处理程序中使用以下内容:

e.Handled = "%&'Ab2".Contains(e.KeyChar.ToString());
要在排除列表中包含双引号,请使用:

e.Handled = ("%&'Ab2"+'"').Contains(e.KeyChar.ToString());

注意:这是区分大小写的。

什么类型的文本框?WinForms?WPF?ASP.NET?Windows 8 Store?请在您尝试过的问题中添加一些代码。string one=radTextBoxControl1.text.Replace(“/”,”);string two=one.Replace(“%,”);//更多字符串radTextBoxControl1.Text=2;radTextBoxControl1表示您正在使用Telerik控件。为什么不直接使用屏蔽编辑控件呢。顺便说一句,我更希望验证失败,因为随机键不起任何作用。还有,为什么您不能允许这些值呢?如果您使用白名单允许的字符集还需要包含控制字符。否则,像
Ctrl+C
这样的快捷键将不再起作用。
Char.IsControl(e.KeyChar)
应该对此有所帮助。如果在解决方案中使用正则表达式,则退格键将不起作用,如果需要使用退格键,则正则表达式应为var regex=new regex(@“[^a-zA-Z0-9\s[\b]]”);如果输入已被复制和粘贴,则按键是否有用?也许TextChanged事件更合适。如果您在回答中也简要描述了正则表达式是什么,或者链接到解释,那就好了。以防OP不知道它。
e.Handled = "%&'Ab2".Contains(e.KeyChar.ToString());
e.Handled = ("%&'Ab2"+'"').Contains(e.KeyChar.ToString());