Unicode正则表达式

时间:2016-01-17 21:13:19

标签: c# regex unicode

我正在尝试处理从键盘按下的键。所以我根据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的解决方案。

1 个答案:

答案 0 :(得分:0)

问题不在于您的正则表达式,而在于e.Key.ToString()KeyRoutedEventArgs.Key的值为the VirtualKey enum-type,例如Spacef5H。所以你的方法恰好适用于字母--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;
    }
}