【问题标题】:Regular Expression allowing only 0-24 float point numbers正则表达式只允许 0-24 浮点数
【发布时间】:2013-05-29 14:19:01
【问题描述】:

我正在创建 WPF TextBox 扩展控件,它必须仅通过使用正则表达式允许以下输入:

  • 数字必须在 0 到 24 之间(0
  • 必须只允许浮点后最多两位数,例如:0.5、0.55、23.2、23.55

我很难找出哪个正则表达式允许通过该范围。我已经开始了:

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

但它不太符合我的要求。所以我请求帮助来获得这个正则表达式。

【问题讨论】:

  • 你尝试过哪些正则表达式?
  • 好的,我试过这个^[0-9]*(?:\.[0-9]*)?$

标签: c# regex


【解决方案1】:

你为什么想用正则表达式头疼?只需解析文本,检查值的范围和小数位数:

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;
}

此外,您可以通过让系统处理来避免全球化问题(使用.,,具体取决于文化)。

【讨论】:

  • 可能是因为所有现有的验证都是通过正则表达式完成的,不希望引入新的验证模式? (但我同意你的观点)
  • 我相信正则表达式是很好的工具,使用得当。我不相信对世界进行正则表达式是一个好主意,因为它难以阅读,难以维护,有时甚至会导致安全问题(google for evil regex)。但确实使用 regex 进行验证可以与应用中的其他验证保持一致,这取决于上下文。
  • @paul - 即使所有其他紧固件都是钉子,您也不应该在项目中的一个螺钉上使用锤子。
  • 我同意。如果不是因为 OP 专门声明“仅通过使用正则表达式”,那么我什至不会考虑使用一个来尝试验证范围。
【解决方案2】:

试试这个模式:

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

【讨论】:

  • 如果您不使用 @"..." 文字字符串,则只需将退格键加倍。除此之外,看起来不错。
  • 实际上有一件事。它可以验证 24.0124.99 之类的数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多