2013-05-29 54 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:更正 –

相关问题