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

WPF TextBox正则验证问题:选中内容无法输入新数字替换

修复WPF TextBox选中内容替换时的数字验证问题

你的问题出在NumberValidationTextBox方法计算预期文本的逻辑上——当前代码直接将输入文本追加到原文本末尾,完全没考虑选中内容会被替换的场景。比如选中123.23后输入5,代码会错误地计算出123.235,不符合正则规则,导致输入被拦截。

只需要修改NumberValidationTextBox方法,加入对选中区域的处理,计算出替换后的真实预期文本即可:

public void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
    Regex regex = new Regex(@"^-?[0-9]*[\.,]?[0-9]?[0-9]?$");
    var textBox = sender as TextBox;
    if (textBox == null) return;

    // 计算替换选中内容后的实际预期文本
    var currentText = textBox.Text;
    int selectionStart = textBox.SelectionStart;
    int selectionLength = textBox.SelectionLength;
    string futureText = currentText.Remove(selectionStart, selectionLength).Insert(selectionStart, e.Text);

    e.Handled = !regex.IsMatch(futureText);
}

修改说明:

  • 先获取TextBox的选中起始位置SelectionStart和选中长度SelectionLength
  • 通过Remove删除选中的内容,再用Insert把输入的文本放到选中位置,得到真正的预期输入结果
  • 原有的正则验证逻辑保持不变,只是验证的目标文本更符合实际操作场景

OnTextChanged方法的逻辑无需改动,它处理逗号转小数点和光标位置的功能依然有效。

内容的提问来源于stack exchange,提问作者online123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:02:42