2015-04-23 141 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,謝謝你的迴應。這個正則表達式根據情況很好,但太長。阿基夫 –