我正在尝试处理从键盘按下的键。所以我根据Regex Unicode制作了这个正则表达式:
private void tbName_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (!Regex.IsMatch(e.Key.ToString(), @"^[\p{L}\p{Z}]$"))
{
e.Handled = true;
}
}
问题是它只接受字母,但是空格(\ p {Z})没有,它应该接受。
是的,我试过(像往常一样),试图在两个unicodes之间放一个“或”(|),但没办法。它绝对不想工作。编辑1:
我测试了char.IsLetter,但是它允许很多非字母,例如:[[] ^ ~'`--º]和笔记本的所有数字的横向数字键盘,例如,而Unicode Regex则没有。所以我想要一个Regex的解决方案。
答案 0 :(得分:0)
问题不在于您的正则表达式,而在于e.Key.ToString()
。 KeyRoutedEventArgs.Key
的值为the VirtualKey
enum-type,例如Space
或f5
或H
。所以你的方法恰好适用于字母--H键的名称是H
- 但这绝对是巧合。
使用e.Key
很好,但您应该通过将其与枚举常量进行比较来检查该值,或者将其转换为int
并查看数值(在上表中记录) ),或这些的混合物。
例如:
private void tbName_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Space) {
// ignore spaces
} else if ((int)e.Key >= (int)VirtualKey.A && (int)e.Key <= (int)VirtualKey.Z) {
// ignore letters
} else {
e.Handled = true;
}
}