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