用于验证 .NET 的非负小数或空白的正则表达式?

Regex to validate a .NET's non-negative decimal or blank?

我正在寻找一个可以验证非负值 decimal(.NET 类型)的正则表达式,即如果可以使用 decimal.Parse(...) 解析非负值,它应该被认为是有效的。否则无效。

如果它未能通过 28-29 位有效数字验证我没关系 - 在这里取决于用户的理智 - 然后我们有另一个验证层无论如何都会捕获它。

这是我想出的:

^(?:[1-9]\d*|0)?(?:\.\d+)?$

问题是它拒绝了 1. 这是一个有效的数字(你可以从 VS 中的直接 window 验证)。可能是我没有测试的其他边缘情况。请指教

P.S。我包含了 ASP.NET 和 C# 标签,因为这是一个用 C# 编写的 Web 应用程序,其中这个正则表达式被传递给第 3 方组件,然后在客户端(即 JS)上工作,所以我不能轻易地把在那里自定义代码(即 decimal.TryParse 或类似的东西)。

您可以使用这个基于否定前瞻的正则表达式来避免匹配单个点:

^(?!\D+$)\+?\d*?(?:\.\d*)?$
  • (?!\D+$) 是在输入为非数字字符时断言失败的否定前瞻
  • ?:\.\d*)? 允许匹配 123. 类型的号码。

RegEx Demo 1

RegEx Demo 2