【发布时间】:2018-12-17 21:07:38
【问题描述】:
我需要验证一个数字是否有效,可以选择使用小数分隔符和千位分隔符。我需要一个正则表达式,因为我没有完成的当前代码使用了一个不能正常工作的正则表达式,我打算修复它。
因此以下组合是合法的(使用. 作为小数分隔符,, 作为千位分隔符)
- 10000
- 100,000,000
- 100,000,000.345345
- 10000.689
但以下内容不合法:
- 10000,000,000.34534
基本上我想要正确使用小数和千位分隔符或根本不使用它们的数字,但不是无效的组合。 我环顾四周,到目前为止我找到了this post。当数字有小数分隔符和千位分隔符时,它有一个很好的正则表达式,但是当我尝试添加其他选项(只有小数分隔符的数字或数字整数)时,我会破坏表达式。
我决定也许我可以捕获与规则匹配的组或,所以数字匹配一个表达式或另一个像这样:
^([+-]?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?)|(((\d)*)+?(\.\d))|(\d*)$
第一组是另一篇文章中的表达式,第二组我认为包含带小数点分隔符的数字,最后一组是整数,但它不起作用。
例如,这些数字不匹配:
- 10000000.56
- 10000000
我认为它正在发生的问题是因为它总是测试第一组,但我不确定如何正确使用这些组,以便它匹配其中任何一个。另外我认为我将 -+ 符号放在了错误的位置。
我确实搜索了很多,但找不到一个可以正常工作的表达式。来自建议的:
来自Regex for number with decimals and thousand separator 帖子
-
((\d){1,3})+([,][\d]{3})*([.](\d)*)?-> 它错误地捕获了 10000000 和 10,000,000。 -
^(?!0+\.00)(?=.{1,9}(\.|$))\d{1,3}(,\d{3})*(\.\d+)?$-> 10000000 失败 -
/^(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(,\d{3})*(\.\d+)?$/-> 10000000 失败 -
((\d){1,3})+([,][\d]{3})*([.](\d)*)?-> -100.03 失败
这个Can I use an OR in regex without capturing what's enclosed? 帖子不是重复的,它解释了一些可以帮助我解决问题的东西,但它不是重复的,特别是因为我也有 +- 符号的问题。此外,我的问题还涉及一个对我来说并不特别的问题,这是许多人面临的问题,但从我目前发现的实现来看,没有任何工作。
来自RegEx matching numeric values with or without thousand separators 帖子
-
^-?([0-9]{1,3}\.?)+$-> -1000 失败,100.00.3 失败,100.00.3 失败 -
^-?(?!0)(?:\d+|\d{1,3}(?:\.\d{3})+)$-> -100.03 失败
【问题讨论】:
-
@JarrodRoberson 建议替代方法是任何答案的一个很好的部分,但这并不会使问题无效。人们需要停止调用“XY”作为完全驳回的理由,不仅是关于功能中的事物的完全有效的技术问题,而且是提出它的人。请记住友善,记住如果你不喜欢这个问题,你不必回答。
标签: regex