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

求满足指定规则的WPF TextBox正则表达式(含代码调整)

WPF TextBox 数字输入验证实现

针对你提出的4条输入规则,修改后的实现如下,同时修复原代码仅验证单个输入字符的局限性:

核心逻辑说明

  • 自动将输入的逗号(,)替换为小数点(.)
  • 验证输入后的完整文本是否符合规则:
    • 仅允许正负数字、最多一个小数点
    • 小数部分最多保留两位
    • 负号仅能出现在文本开头

修改后的代码

<TextBox PreviewTextInput="NumberValidationTextBox"/>
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
    // 替换逗号为小数点
    string inputText = e.Text.Replace(',', '.');
    TextBox textBox = sender as TextBox;
    if (textBox == null) return;

    // 构建输入后的完整文本(考虑光标位置和选中内容)
    string currentText = textBox.Text;
    string newText = currentText.Remove(textBox.SelectionStart, textBox.SelectionLength)
                               .Insert(textBox.SelectionStart, inputText);

    // 验证规则的正则表达式
    Regex regex = new Regex(@"^-?\d*(\.\d{0,2})?$");
    // 允许空文本(用户删除内容的情况),同时验证非空文本是否符合规则
    e.Handled = !string.IsNullOrEmpty(newText) && !regex.IsMatch(newText);
}

正则表达式解释

^-?\d*(\.\d{0,2})?$

  • ^:匹配文本开头
  • -?:可选的负号,仅允许出现一次
  • \d*:整数部分,允许0个或多个数字(支持先输入小数点的情况,比如.12)
  • (\.\d{0,2})?:可选的小数部分,最多两位数字
  • $:匹配文本结尾

补充说明

如果需要禁止单独输入负号或小数点,可以调整正则为^-?\d+(\.\d{1,2})?$,但这样用户无法先输入小数点再补整数部分,可根据实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:43:24