You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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事件,仅作用于当前输入框,不会影响其他控件逻辑:

  1. 设计界面选中textbox1控件,在属性面板的「事件」标签中找到KeyPress项,双击生成事件处理方法
  2. 在生成的方法中写入以下代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:24:04