【问题标题】:How to disallow all non-numeric input in console during an input prompt?如何在输入提示期间禁止控制台中的所有非数字输入?
【发布时间】:2011-07-18 06:06:26
【问题描述】:

这里是语音控制台。

这个想法是,如果用户在控制台的输入提示期间按数字以外的任何键(字母键和数字键盘上方的键),则不会输入任何内容。就好像控制台将忽略任何非数字按键。

如何以正确的方式做到这一点?

【问题讨论】:

  • 您是否关心控制台的精美编辑功能,例如向上箭头重复以前的输入?
  • 是的。那会很整洁。
  • 啊,但是如果之前的输入不是数字呢? (咧嘴笑)那么左箭头和右箭头呢?你想支持这些,还是数字和退格足够好?
  • 你知道吗。搞砸那些花哨的功能。

标签: c# validation input console


【解决方案1】:

试试 ReadKey 方法:

while (processing input)
{
  ConsoleKeyInfo input_info = Console.ReadKey (true); // true stops echoing
  char input = input_info.KeyChar;

  if (char.IsDigit (input))
  {
     Console.Write (input);
     // and any processing you may want to do with the input
  }
}

【讨论】:

  • 很好,我不知道不要回声标志。
  • 无法将 System.ConsoleKeyInfo 隐式转换为 Char
  • 它显示了我输入的数字的 unicode。相反,我希望将实际输入分配给对象变量变量。例如,如果我输入 7,它会将 55 分配给变量 x,但假设分配 7。
  • @Precision:您需要自己在// and any processing... 位中将Unicode 字符转换为数值。使用TryParse 或仅减去 48。
  • 如果要减去 48,最好明确检查>= '0' && <= '9',而不是使用IsDigit(因为IsDigit 将允许任何Unicode 调用的数字)。
【解决方案2】:
private static void Main(string[] args) {

    bool inputComplete = false;
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    while (!inputComplete ) {

        System.ConsoleKeyInfo key = System.Console.ReadKey(true);

        if (key.Key == System.ConsoleKey.Enter ) {                
            inputComplete = true;
        }
        else if (char.IsDigit(key.KeyChar)) {
            sb.Append(key.KeyChar);
            System.Console.Write(key.KeyChar.ToString());
        }
    }

    System.Console.WriteLine();
    System.Console.WriteLine(sb.ToString() + " was entered");
}

【讨论】:

    【解决方案3】:

    这个小实验是这样工作的:

    static void Main()
    {
        while (true)
        {
            var key = Console.ReadKey(true);
            int i;
            if (int.TryParse(key.KeyChar.ToString(), out i))
            {
                Console.Write(key.KeyChar);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多