C# 在WPF中的KeyDown事件中使用正则表达式不限制某些特殊字符

C# 在WPF中的KeyDown事件中使用正则表达式不限制某些特殊字符,c#,regex,C#,Regex,我试图限制除英文字母以外的所有字符,但我仍然能够输入一些不好的顽皮字符!我怎样才能防止这种情况。这些没有被我的正则表达式捕获的顽皮角色是-+=? 尝试以下表达式: var restrictedChars = new Regex(@"[^(\W_0-9)]+"); 它将排除除不依赖于特殊语言的大小字母字符以外的所有字符 希望有帮助 经过这么多的挠头之后,我意识到由于一些我不知道的原因,KeyDown事件不会捕获某些字符,但previewtextriput会捕获 如果您还想禁用空格按钮:

我试图限制除英文字母以外的所有字符,但我仍然能够输入一些不好的顽皮字符!我怎样才能防止这种情况。这些没有被我的正则表达式捕获的顽皮角色是-+=?<>

尝试以下表达式:

var restrictedChars = new Regex(@"[^(\W_0-9)]+");
它将排除除不依赖于特殊语言的大小字母字符以外的所有字符


希望有帮助

经过这么多的挠头之后,我意识到由于一些我不知道的原因,KeyDown事件不会捕获某些字符,但previewtextriput会捕获

如果您还想禁用空格按钮:

    <TextBox Height="21"
             Width="77" 
             MaxLength="2"
             PreviewTextInput="UIElement_OnPreviewTextInput"
             PreviewKeyDown="UIElement_OnKeyDown"
                                       >
    </TextBox>

    private void UIElement_OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Space)
        {
            e.Handled = true;
        }
    }

regex似乎捕捉到了在regexr.com上测试过的数据。您确定问题不在其他地方吗?是的,问题。@rtmh您可以在WPF/C中轻松构建问题。由于某些奇怪的原因,它不起作用@一个建议!也许这与按下换档按钮有关!因为我们需要按这个键才能进入+?我不会说我们可以轻松构建它。至于这个问题,请查看KeyEventArgs::Key函数的细节,它是否会返回您期望的结果?谢谢,但它排除了所有内容!即使是普通的字母表!请确保在表达式中使用大写字母“W”,因为小写字母“W”可能会导致我的答案中的表达式出现问题。感谢意大利,问题似乎出在其他地方,请参见下面的答案。我知道一定有更好的答案,很好的发现:
    private void UIElement_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        var restrictedChars = new Regex(@"[^a-zA-Z\s]");

        var match = restrictedChars.Match(e.Text);

        // Check for a naughty character in the KeyDown event.
        if (match.Success)
        {
            // Stop the character from being entered into the control since it is illegal.
            e.Handled = true;
        }
    }

    <TextBox Height="21"
             Width="77" 
             MaxLength="2"
             PreviewTextInput="UIElement_OnPreviewTextInput"
                                       >
    </TextBox>
    <TextBox Height="21"
             Width="77" 
             MaxLength="2"
             PreviewTextInput="UIElement_OnPreviewTextInput"
             PreviewKeyDown="UIElement_OnKeyDown"
                                       >
    </TextBox>

    private void UIElement_OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Space)
        {
            e.Handled = true;
        }
    }