Ext.net Numberfield限制输入只有2个可选的小数,带有输入掩码

时间:2016-01-25 15:54:12

标签: c# regex input ext.net

我需要在Ext.Net中对numberfield进行配置,但我无法找到正确的输入掩码,可选择允许直到两位小数(第三位小数等等被丢弃,如果用户按下该键完全被忽略) )。自然数的数量可以是任何数字。禁止使用否定数字。

我的案例:

  • 54 - >接受
  • 155,89 - >接受
  • 10.234,01 - >接受
  • 5,2 - >接受
  • 1,23 - >接受
  • 12,258 - >禁
  • 1,2,5 - >禁
  • sdf123 - >禁

这是我迄今为止尝试过的(C#代码):

X.NumberFieldFor(m => m.MyPoperty).ID("MyId").HideTrigger(true).MaskRe(@"/[\d,]/")
    .Plugins(X.InputMask().ClearWhenInvalid(false)
    .Mask("9?999,99")
    );

X.NumberFieldFor(m => m.MyPoperty).ID("MyId").HideTrigger(true).MaskRe(@"/[\d,]/")
    .Plugins(X.InputMask().ClearWhenInvalid(false)
    .Mask("x,tt")
    .MaskSymbols(symbols =>
    {
        symbols.Add(new MaskSymbol() { Name = "x", Regex = @"/^[0-9]*$/" });
        symbols.Add(new MaskSymbol() { Name = "t", Regex = "[0-9]" });
    })
    );

X.NumberFieldFor(m => m.SuperficieRealSol).ID("MyId").HideTrigger(true)
    .Plugins(X.InputMask().ClearWhenInvalid(false)
    .Mask("x")
    .MaskSymbols(symbols =>
    {
        symbols.Add(new MaskSymbol() { Name = "x", Regex = @"^\d+(\.\d{1,2})?$" });
    })
    );

X.NumberFieldFor(m => m.MyPoperty).ID("MyId")
    .AllowExponential(false)
    .DecimalPrecision(2)
    .MinValue(0)
    .HideTrigger(true);

我认为这里的问题是正则表达式和掩码符号之间的匹配。我无法看到如何配置mask和mask符号以匹配多个键输入。 例如,如果我的面具是

  

X,T

  • x将是任何自然数\d+,它与数字位数无关。
  • t将是(?:,\d{1,2})?

但这种做法似乎无法奏效。

1 个答案:

答案 0 :(得分:1)

描述所有这些事情的正则表达式是 @"^\d+(?:\.\d+)?(?:,\d{1,2})?$"

如果你能描述一个面具,它应该有效。

扩展

 ^ 
 \d+ 
 (?:
      \. \d+ 

 )?
 (?:
      ,
      \d{1,2} 
 )?
 $