【问题标题】:TextBox Only Accepts Numeric and Comma- C# Windows FormsTextBox 仅接受数字和逗号 - C# Windows 窗体
【发布时间】:2016-09-14 20:02:26
【问题描述】:

我想限制只接受数字和逗号的文本框。我该怎么做这个按键??

例子:

 1,2,223,222 -->Valid
 1,,22,,33   -->Invalid
 ab,c,d      -->Invalid

【问题讨论】:

  • 如果要验证输入,模式可以是"^[0-9]+(,[0-9]+)*$"

标签: c# regex winforms


【解决方案1】:

如果要验证输入,可以使用正则表达式

  String input = "1,2,223,222";
  String pattern = "^[0-9]+(,[0-9]+)*$";

  Console.Write(Regex.IsMatch(input, pattern) ? "valid" : "invalid");

小测试:

   String[] tests = new String[] {
     "1,2,223,222",
     "1,,22,,33",
     "ab,c,d", 
   };

   var report = tests
     .Select(item => String.Format("{0,-12} --> {1}", 
                                   item, 
                                   Regex.IsMatch(item, pattern) ? "valid" : "invalid"));

   // 1,2,223,222  --> valid
   // 1,,22,,33    --> invalid
   // ab,c,d       --> invalid
   Console.Write(String.Join(Environment.NewLine, report));

如果您想限制输入,请三思而后行:用户输入的正确程序是什么,比如说

  1,2 

输入限制不能自然不言自明一个

  "1" -> "1," (invalid! System prevents such an input) -> "1,2"

但是奇怪

  "1" -> "12" -> "1,2"

所以我建议 lenient 用户输入控制:

private void myControl_KeyPress(object sender, KeyPressEventArgs e) {
  // temporary invalid inputs like "1," are allowed
  if ((e.KeyChar < 32) || (e.KeyChar >= '0') && (e.KeyChar <= '9') || (e.KeyChar == ','))
    return;

  // only evident errors (like 'A' or '&') are restricted
  e.Handled = true;
}

然后,最后,(在OK 点击等)验证。

【讨论】:

  • Dmitry Bychenko .. 这个解决方案的唯一问题是它不能处理后续逗号(例如 ; 1,,2)
  • @vmb:问题指出 后续逗号 无效1,,22,,33 --&gt;Invalid(问题的第二个示例)。如果这些输入实际上是有效的,请编辑问题。
  • @vmb:如果您允许在输入中使用后续逗号 within,例如 1,,,2,但不接受 dangling (例如 ,12,) 那么模式可以是"^[0-9]|([0-9](,|[0-9])*[0-9])$"
  • 是的..我想限制后面的逗号(即用户应该不能输入第二个逗号
  • @vmb:如果您打算在KeyPress 中添加限制,请再次三思而后行:如果用户想添加第一项,然后添加最后一项怎么办: 15,,25 然后计算并插入,比如说,中间的 average15,20,25?更好的策略是仅限制明显的错误(例如A-),并且不干扰用户以他/她想要的方式输入正确的字符串。
猜你喜欢
  • 2023-01-27
  • 2011-03-08
  • 2023-03-20
  • 2018-11-07
  • 2011-04-16
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多