【发布时间】:2016-09-14 20:02:26
【问题描述】:
我想限制只接受数字和逗号的文本框。我该怎么做这个按键??
例子:
1,2,223,222 -->Valid
1,,22,,33 -->Invalid
ab,c,d -->Invalid
【问题讨论】:
-
如果要验证输入,模式可以是
"^[0-9]+(,[0-9]+)*$"
我想限制只接受数字和逗号的文本框。我该怎么做这个按键??
例子:
1,2,223,222 -->Valid
1,,22,,33 -->Invalid
ab,c,d -->Invalid
【问题讨论】:
"^[0-9]+(,[0-9]+)*$"
如果要验证输入,可以使用正则表达式:
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 点击等)验证。
【讨论】:
1,,22,,33 -->Invalid(问题的第二个示例)。如果这些输入实际上是有效的,请编辑问题。
1,,,2,但不接受 dangling (例如 ,1 或2,) 那么模式可以是"^[0-9]|([0-9](,|[0-9])*[0-9])$"
KeyPress 中添加限制,请再次三思而后行:如果用户想添加第一项,然后添加最后一项怎么办: 15,,25 然后计算并插入,比如说,中间的 average:15,20,25?更好的策略是仅限制明显的错误(例如A 或-),并且不干扰用户以他/她想要的方式输入正确的字符串。