【问题标题】:Masking Textbox to accept only decimals屏蔽文本框以仅接受小数
【发布时间】:2012-08-31 05:39:52
【问题描述】:

我正在使用此链接中的技术来屏蔽我的文本框以接受十进制格式的字符串(带有单个句点的数字)。

How to define TextBox input restrictions?

这是我放在掩码中的正则表达式:

b:Masking.Mask="^\d+(\.\d{1,2})?$"

出于某种奇怪的原因,它允许我输入数字,但我无法在文本框中插入句点。

我也在这里验证了正则表达式,所以正则表达式绝对正确。

http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

可能是什么问题?

【问题讨论】:

    标签: c# .net wpf regex maskedtextbox


    【解决方案1】:

    用这个修改你的正则表达式:

    ^\d+([\.\d].{1,2})?$
    

    DEMO

    编辑:

    上述正则表达式还允许123..1 多于1 个小数点。所以我刚刚发现了问题并修复了以下问题:

    ^(\d+)?+([\.]{1})?+([\d]{1,2})?$
    

    DEMO

    【讨论】:

    • 哇哦,原来是正则表达式。一旦 5 分钟过去,我会将其标记为答案。谢谢!
    • 嗯,您编辑的答案给了我以下错误:Error 11 parsing "^(\d+)?+([\.]{1})?+([\d]{1,2} )?$" - 嵌套量词 +.
    • 在.Net中,它会将含义更改为"match one or more of the preceding character"尝试将Escape特殊字符作为+(在@""文字内)..所以你的正则表达式将是@"^(\d\+)?\+([\.]{1})?\+([\d]{1,2})?$"
    • 使用该行为,删除 + 对我有用:^(\d+)?([\.]{1})?([\d]{1,2})?$
    【解决方案2】:

    你可以使用正则表达式

    ^(\d+)?+([\.]{1})?+([\d]{1,2})?$
    

    或者你可以使用下面的事件

       bool blHasDot = false;
       private void txt_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
            {
                // Allow Digits and BackSpace char
            }
            else if (e.KeyChar == '.' && !blHasDot)
            {
                //Allows only one Dot Char
                blHasDot=true;
            }
            else
            {
                e.Handled = true;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-01-02
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多