C# 粘贴文本通过验证

C# Paste text gets through validation

我需要验证简单的文本框以防止用户输入任何特殊字符 ("!@#$%* \t")。它有效,但用户可以通过右键单击并粘贴将值粘贴到文本框中来绕过此验证。有没有办法验证粘贴的值?

 private void NoSpecialCharacter(object sender, KeyPressEventArgs e)
    {
        var regex = new Regex(@"[^a-zA-Z0-9\s]");
        if (regex.IsMatch(e.KeyChar.ToString()))
        {
            e.Handled = true;
        }
    }

使用 TextChanged TextBox 控件的事件 - 当您在 TextBox 中输入任何值时它起作用 - 粘贴或输入 - 无关紧要。

将您的验证作为带有 bool 结果的函数,并在每个 TextChanged 事件上检查它,就像这样

private void textBox_TextChanged(object sender, EventArgs e)
{
    if (CheckStrng(textBox.Text))
        // Validated - do what you needed
    else
        // Not Validated 
}

您可以使用正则表达式创建您自己的方法,而不是这个 LINQ

private bool CheckStrng(string str)
    {
     return str.Length == str.Count(x => Char.IsLetterOrDigit(x)) + str.Count(x => Char.IsWhiteSpace(x));
    }