【问题标题】:regex for decimal value restrict 16 digit十进制值的正则表达式限制 16 位
【发布时间】:2015-04-23 12:08:25
【问题描述】:

我想要一个正则表达式来将输入十进制值限制为最大值。 16位或15位加1个字符(包括小数点)

我在正则表达式下面发现它在 C# 代码中工作,但是当我在 TextEdit xaml 中使用它作为掩码时。 (DevExpress) 抛出异常syntax error:

面具:

^(?:(?=.{0,16}$)\d*\.\d+|\d{0,16})[kKmMbBtT]?$

TextEdit Xaml:

<dxe:TextEdit HorizontalAlignment="Left" MaskType="RegEx"
     Mask="(?:(?=.{0,16}$)[0-9]*([.]?[0-9]+)|[0-9]{0,16})[kKmMbBtT]?"
     VerticalAlignment="Top" Width="150"
     EditValue="{Binding DecValue, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
     Margin="10,33,0,0"/>

我想从中达到的目的:

  • 用户可以输入 16 位小数(包括小数点)或
  • 用户可以输入15位数字和1个字符(包括小数点)
  • 他只能输入一次小数点
  • 输入字符串的总长度不得超过 16 个字符。

【问题讨论】:

  • MaskType="RegEx" Mask="(?:(?=.{0,16}$)[0-9]*([.]?[0-9]+)|[ 0-9]{0,16})[kKmMbBtT]?"
  • @GrantWinney 例外是:syntax error,直接在XAML编辑器中抛出。

标签: c# regex wpf xaml devexpress


【解决方案1】:

根据documentation

扩展正则表达式提供了几乎无限的灵活性 创建输入掩码。此模式下掩码使用的语法类似 POSIX ERE 规范定义的语法。反向引用 不支持。

因此,您不能使用(?: <em>subexpression</em>)(?= <em>subexpression</em>) 等分组结构。您可以使用一些奇怪的掩码,如下所示:

\d{0,16}|\d{14}\R.\d{1}|\d{13}\R.\d{1,2}|\d{12}\R.\d{1,3}|\d{11}\R.\d{1,4}|\d{10}\R.\d{1,5}|\d{9}\R.\d{1,6}|\d{8}\R.\d{1,7}|\d{7}\R.\d{1,8}|\d{6}\R.\d{1,9}|\d{5}\R.\d{1,10}|\d{4}\R.\d{1,11}|\d{3}\R.\d{1,12}|\d{2}\R.\d{1,13}|\d{1}\R.\d{1,14}|\R.\d{1,15}

在你的 XAML 中:

<dxe:TextEdit HorizontalAlignment="Left" MaskType="RegEx"
     Mask="\d{0,16}|\d{14}\R.\d{1}|\d{13}\R.\d{1,2}|\d{12}\R.\d{1,3}|\d{11}\R.\d{1,4}|\d{10}\R.\d{1,5}|\d{9}\R.\d{1,6}|\d{8}\R.\d{1,7}|\d{7}\R.\d{1,8}|\d{6}\R.\d{1,9}|\d{5}\R.\d{1,10}|\d{4}\R.\d{1,11}|\d{3}\R.\d{1,12}|\d{2}\R.\d{1,13}|\d{1}\R.\d{1,14}|\R.\d{1,15}"
     VerticalAlignment="Top" Width="150"
     EditValue="{Binding DecValue, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
     Margin="10,33,0,0"/>

【讨论】:

  • 您好 nempoBu4,感谢您的回复。这个正则表达式根据情况很好,但它太长了。阿基夫
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多