C#文本框提交字母时错误提示实现:正则校验不触发问题
问题根因
你现有代码无法触发提示的核心原因是正则表达式规则配置错误:
你使用的@"[^0-9],[^0-9]"规则匹配的是「非数字字符 + 英文逗号 + 非数字字符」的特定格式,和“判断是否存在任意非数字字符”的需求完全不符,因此判断条件几乎不会触发,自然不会弹出错误提示。
额外隐患:textbox1.Text.Remove(textbox1.Text.Length - 1)在输入框为空时执行会触发索引越界异常,导致程序崩溃。
低侵入实现方案
提供两种完全不影响其余业务代码的实现方式,可根据需求选择:
方案1:提交节点校验(无任何输入逻辑修改)
仅在用户点击提交按钮时做校验,不会干预用户输入过程,也不会修改原有业务逻辑,替换你原有判断代码即可:
// 匹配任意非数字字符,存在则触发校验 if (System.Text.RegularExpressions.Regex.IsMatch(textbox1.Text, @"[^0-9]")) { MessageBox.Show("仅允许输入数字。"); // 不需要自动清空内容可删除下行代码 textbox1.Text = string.Empty; textbox1.Focus(); return; } // 原有提交逻辑保持不变写在下方即可
方案2:输入实时拦截(从根源避免非数字输入)
如果希望用户输入时就直接拦截非数字内容,可给textbox1单独绑定KeyPress事件,仅作用于当前输入框,不会影响其他控件逻辑:
- 设计界面选中textbox1控件,在属性面板的「事件」标签中找到
KeyPress项,双击生成事件处理方法 - 在生成的方法中写入以下代码:
private void textbox1_KeyPress(object sender, KeyPressEventArgs e) { // 仅允许输入数字和退格键,其余输入直接拦截 if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8) { e.Handled = true; MessageBox.Show("仅允许输入数字。"); } }
内容的提问来源于stack exchange,提问作者nxbita
相关产品推荐
相关产品推荐

