【问题标题】:Verify string does NOT contain a value other than known values [VB.NET]验证字符串不包含已知值以外的值 [VB.NET]
【发布时间】:2011-05-16 19:18:43
【问题描述】:

我正在尝试验证字符串是否只包含已知值。在这种情况下,我需要确保它只包含“Shift”、“Control”或“Alt”,但不一定包含所有这些。例如,这些应该是真的:“Shift + P”、“Shift + Control + H”、“Alt + U”;但这些不应该是:“Other + P”、“Shift + Fake + Y”、“Unknown + Shift + E”等

这是我尝试使用的代码:

If Not shortcut.Contains("Shift") Or Not shortcut.Contains("Control") Or Not shortcut.Contains("Alt") Then
    MessageBox.Show("Invalid")
End If

我很难理解执行此操作所需的逻辑。我假设有一个逻辑运算符可以做到这一点?

【问题讨论】:

    标签: vb.net string logic


    【解决方案1】:

    我认为您不应该为此目的使用字符串。您需要一种可以表示热键组合的数据类型,它由一个“普通”键和一组修饰符(Alt、Control、Shift)组成,每个修饰符都可以打开或关闭。开/关修饰符可以由带有标志的枚举表示,“正常”键可以由单独的枚举表示。这两个枚举都可以包含在一个类中。

    System.Windows.Forms.Keys 枚举可以用作两个枚举。您可以存储两个数值(一个用于修饰符,一个用于“普通”键)——底层枚举值——它们将代表组合。无需存储字符串。

    如果您确实为此目的使用字符串,则需要更好地定义约束。您的规则没有指定“Shift + Other”如何无效,但“Shift + F”是。无论如何,解决这个问题的一种方法是用“+”分隔字符串(假设这始终是分隔符),然后将每个部分与有效值列表进行比较,其中显然包含“Shift”、“Alt”、“控制”和所有单个字母。

    【讨论】:

    • 我正在从 CVS 文件中加载它。我可以更改存储方法以分别存储每个修饰符和键,但我想了解其中涉及什么逻辑。关于第 2 点,最后一个“值”始终是键;其他为修饰符,其中“Shift”、“Control”和“Alt”有效。
    • 我编辑了答案以提出一种验证字符串的方法,但我仍然认为您应该使用更合适的数据类型。
    • 我还添加了关于替代存储方法的建议。我希望这能更好地解释它。
    • +1 建议使用正确的存储方法。将值存储为字符串然后尝试解析它们是不必要的困难,因为您可以将它们存储为简单的整数值,映射到预先存在的枚举。
    【解决方案2】:

    我认为将字符串分割成段然后遍历单词列表然后比较应该存在的单词会更容易。这是在 C# 中,但我想你可以弄清楚。

    C#:

            string text = "Shift+Control+Alt+Other";
            string[] textSegments = text.Split('+');
            string[] allowedWords = { "Alt", "Shift", "Control" };
            foreach (string t in textSegments)
            {
                bool temp = false;
    
                foreach (string t2 in allowedWords)
                {
                    if (t == t2)
                    {
                        temp = true;
                        continue;
                    }
                }
    
                if (!temp)
                {
                    MessageBox.Show("Wrong!");
                }
                else
                {
                    MessageBox.Show("Right!");
                }
    
    
            }
    

    输出将是 4 个消息框,显示:“正确!” “正确的!” “正确的!” “错了!”

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多