2015-04-23 314 views
1

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

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

Exception

面膜:

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

文本编辑的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位和一个字符(包含小数点)
  • 他可以只输入小数点一次
  • 输入的总长度字符串不能超过16个字符。
+0

MaskType =“正则表达式“Mask =”(?:(?=。{0,16} $)[0-9] *([。]?[0-9] +)| [0-9] {0,16})[kKmMbBtT ]?” –

+3

什么是例外? –

+0

@GrantWinney例外是:'语法错误',直接在'XAML'编辑器中抛出。 – nempoBu4

回答

0

根据documentation

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

所以,你不能使用分组构造这样(?: subexpression)(?= subexpression)等,您可以使用一些怪异的面具是这样的:

\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"/> 
+0

嗨nempoBu4,谢谢你的回应。这个正则表达式根据情况很好,但太长。阿基夫 –