【问题标题】:How to block or restrict special characters from textbox如何阻止或限制文本框中的特殊字符
【发布时间】:2019-09-17 04:31:18
【问题描述】:

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

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

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

在这个模式下很长=(

【问题讨论】:

  • 什么样的文本框?表格? WPF? ASP.NET? Windows 8 商店?
  • 请在您尝试过的问题中添加一些代码。
  • 字符串一 = radTextBoxControl1.Text.Replace("/", "");字符串二 = one.Replace("%", ""); //more string radTextBoxControl1.Text = two;
  • radTextBoxControl 表示您正在使用 Telerik 控件。为什么不直接使用蒙版编辑控件。顺便说一句,我宁愿让随机密钥不做任何事情的验证失败。还有为什么你不能允许这些值?

标签: c# winforms


【解决方案1】:

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

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;
    }
}

【讨论】:

  • 如果您对允许的字符集使用白名单,您还需要包括控制字符。否则像Ctrl+C 这样的快捷方式将不再起作用。 Char.IsControl(e.KeyChar) 应该对此有所帮助。
  • 如果您在解决方案中使用正则表达式,退格键将不起作用,如果您需要使用退格键,则正则表达式应为 var regex = new Regex(@"[^a-zA -Z0-9\s[\b]]");
  • 如果输入已被复制和粘贴,按键会有用吗?
  • 也许 TextChanged 事件可能更合适。
【解决方案2】:

你可以用这个:

private void textBoxSample_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = !char.IsLetter(e.KeyChar) && !char.IsDigit(e.KeyChar);
    }

它阻止特殊字符,只接受整数/数​​字和字符

【讨论】:

    【解决方案3】:

    下面的代码只允许数字、字母、退格和空格。

    我包含了 VB.net,因为我必须处理一个棘手的转换。

    C#

    private void textBoxSample_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = e.KeyChar != (char)Keys.Back && !char.IsSeparator(e.KeyChar) && !char.IsLetter(e.KeyChar) && !char.IsDigit(e.KeyChar);
    }
    

    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
    

    【讨论】:

    • 要扩展此解决方案以检查任何其他特别需要的字符,除了已经检查过的字符,您只需添加 Linq contains 语句。例如。还允许使用下划线、破折号和哈希:&amp;&amp; !"-_#".Contains(e.KeyChar)
    【解决方案4】:

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

    当事件被触发时调用一个方法,比如说,PurgeTextOfEvilCharacters()。

    在这个方法中有一个你想要“阻止”的字符数组。遍历 TextBox 控件的 .Text 的每个字符,如果在数组中找到该字符,则不需要它。用“okay”字符重建字符串,你就可以开始了。

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

    【讨论】:

      【解决方案5】:

      对我来说最好的:

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

      启用 delete 和 backsapce Keys ...等会更有用

      【讨论】:

        【解决方案6】:

        我们可以使用正则表达式验证器来验证它

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

        <asp:TextBox runat="server" ID="txtname" />
                <asp:RegularExpressionValidator runat="server" ControlToValidate="txtname"
                    ForeColor="Red" SetFocusOnError="true" Display="Dynamic"
                    ErrorMessage=" Restrict for special characters" ID="rfvname"
                    ValidationExpression="^[\sa-zA-Z0-9]*$">
        
                </asp:RegularExpressionValidator>
        

        你也可以在这里看到演示 https://www.neerajcodesolutions.com/2018/05/how-to-restrict-special-characters-in.html

        【讨论】:

        • 如果您还在回答中简要描述了正则表达式是什么,或者链接到解释,那就太好了。以防 OP 不知道。
        【解决方案7】:

        另一种排除各种字符选择(例如 %,&,',A,b,2)的方法是在 TextBox KeyPress 事件处理程序中使用以下内容:

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

        要在排除列表中包含双引号,请使用:

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

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

        【讨论】:

          猜你喜欢
          • 2021-01-22
          • 1970-01-01
          • 2019-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-14
          相关资源
          最近更新 更多