c# - 正则表达式 (.NET) 以多种格式验证任何实数

标签 c# .net regex validation numbers

我正在尝试使用 .NET 中的一个正则表达式规则验证不同格式的任何实数。我指的格式如下:

点(千位)和逗号(十进制)

123 ; 1.234.567 ; 12.345.678 ; 123.456.789 ; 1.234.567,89 ; 1.234,56789 ; 1,2 ; 0,123

逗号(千位)和点(十进制)

1,234,567 ; 12,345,678 ; 123,456,789 ; 1,234,567.89 ; 1,234.56789 ; 1.2 ; 0.123

空格(千位)和点或逗号(十进制)

1 234 567 ; 12 345 678 ; 123 456 789 ; 1 234 567,89 ; 1 234 567.89 ; 1 234,56789 ; 1 234.56789

我对正则表达式的基础知识了解得更多一些,所以我做了这个。到目前为止没有成功。

(^|\s)(-|\+|±|\+/-)?(?:(([1-9]{1,3})([,]\d{3})*|[0]?)([\.]\d+)?)|(?:(([1-9]{1,3})([\.]\d{3})*|[0]?)([,]\d+)?)|(?:(([1-9]{1,3})([\s]\d{3})*|[0]?)([\.|,]\d+)?)(\s|$)

任何人都可以帮助我或将我链接到解决方案吗?

最佳答案

嗯,这可能不是最佳的正则表达式:

^\d*$|^(?:\d{1,3}(?:\.\d{3})*(?:,\d{1,5})?)$|^(?:\d{1,3}(?:,\d{3})*(?:\.\d{1,5})?)$|^(?:\d{1,3}(?: \d{3})*(?:[,.]\d{1,5})?)$

但它完成了工作。我会看看如何在不久的将来做出更好的。这是一个 Live Demo


如果你的输入不是那个脏的(即:一旦你有一个空格作为千​​位分隔符,你就不会得到点然后逗号,不像1 032,354.12)你可以使用这个简单的版本:

^\d{1,3}(?:[., ]\d{3})*(?:[.,]\d{1,5})?$

这意味着:

  • \d{1,3} <= 以 1 到 3 位数字开头;
  • (?:[., ]\d{3})* <= 重复 0 到 n 次后带 3 位数的千位分隔符;
  • (?:[.,]\d{1,5})? <= 小数分隔符后跟 1 到 5 位数字,0 次或 1 次。

关于c# - 正则表达式 (.NET) 以多种格式验证任何实数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35777703/

相关文章:

regex - 不使用查询时 url 的 apache 重写规则

c# - 无法加载文件或程序集 stdole

.net - 如何通过从 Asp.NET Controller 抛出异常来重定向?

c# - 为什么不能使用自动布局编码结构

c# - mvc3 Controller 方法中的ajax发布数据为空

c# - Enum.TryParse - 它是线程安全的吗?

javascript - firefox 3.6.20 正则表达式给出不一致的结果

java - String 中的 4 个子字符串

c# - 如何将RGBA css颜色格式转换为十六进制格式

c# - 如何将通用项添加到绑定(bind)到 WPF 中的集合的 ComboBox