2013-05-29 52 views
0

我創建文本框WPF擴展控制必須只能通過使用正則表達式允許下列輸入:正則表達式只允許0-24浮點數字

  • 數量必須是在0和24(0 < =數< = 24)
  • 必須只允許浮點後最多兩位數字,例如:0.5,0.55,23.2,23.55

這是相當困難的我找出其中的正則表達式將允許傳遞範圍。我已經開始:

^[0-9]*(?:\.[0-9]*)?$ 

但它不完全符合我的要求。所以我正在尋求幫助來獲得這個正則表達式。

+5

你嘗試過什麼正則表達式? – user7116

+0

好的,我試過這個^ [0-9] *(?:\。[0-9] *)?$ – Arterius

回答

4

爲什麼要使用正則表達式得到一個頭痛?簡單地分析文本,檢查值的範圍和小數位數:

bool IsValid(string text) { 
    decimal candidate; 
    if(decimal.TryParse(text, out candidate)){ 

     if(
      candidate >= 0 && // Check lower bound 
      candidate <= 24 && // CHeck higher bound 
      Math.Round(candidate, 2) == candidate // Check number of decimals 
     ) { 
      return true; 
     } 

    } 
    return false; 
} 

此外,你將通過讓系統處理這避免全球化問題(使用.,取決於文化)。

+0

可能是因爲所有現有的驗證都是由正則表達式完成的,並且不希望引入新的驗證模式? (但我同意你的觀點) – paul

+5

我相信正則表達式是很好的工具,明智地使用。我不認爲將世界重新組合是一個好主意,因爲它很難閱讀,難以維護,甚至有時會導致安全問題(谷歌爲邪惡的正則表達式)。但是確實,使用正則表達式可以保持與應用程序中的其他驗證保持一致,這取決於上下文。 –

+1

@paul - 即使所有其他緊固件都是釘子,也不應該在項目中的一顆螺絲上使用錘子。 –

4

嘗試這種模式:

^24(?:\\.00?)?|(?:2[0-3]|1?[0-9])(?:\\.[0-9]{1,2})?$ 
+0

如果你不使用'@「......」''文字字符串。除此之外,看起來不錯。 –

+3

實際上有一件事。它驗證數字像'24.01'到'24.99'。 – Jerry

+0

@Jerry:更正 –

相關問題