我需要使用小数分隔符和千位分隔符来验证数字是否有效.我需要一个正则表达式,因为当前的代码,我没有使用正则表达式不能正常工作,我的目标是解决它.
所以以下组合是合法的(使用.小数分隔符和,千分隔符)
但以下不合法:
基本上我想要正确使用十进制和千位分隔符或根本没有它们的数字,但不是无效的组合.我环顾四周,到目前为止,我找到了这篇文章.当数字有十进制分隔符和千位分隔符时,它有一个很好的正则表达式匹配,但是当我尝试添加其他选项(仅带小数分隔符或数字整数的数字)时,我打破了表达式.
我决定也许我可以捕获与或匹配规则的组,因此数字匹配一个表达式或另一个表达式如下:
^([+-]?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?)|(((\d)*)+?(\.\d))|(\d*)$
Run Code Online (Sandbox Code Playgroud)
第一组是从另一个帖子的表达,第二组我认为用小数分隔符覆盖数字,最后一个是整数,但它不起作用.
例如,这些数字不匹配:
我认为这个问题正在发生,因为它总是测试第一组,但我不确定如何正确使用组,因此它匹配其中任何一个.另外我想我会把 - +标志放在错误的地方.
我做了很多搜索,找不到一个正常工作的表达.从建议的:
((\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失败 这可以在正则表达式中使用OR而不捕获所包含的内容吗?帖子不是重复的,它解释了可以帮助我解决问题的东西,但它不是重复的,特别是因为我也有+ - 符号的问题.此外,我的问题涵盖了一个对我来说不是特别的问题,这是许多人面临的问题,但从我迄今为止发现的实现来看,没有任何问题.
^-?([0-9]{1,3}\.?)+$ - >它失败了-1000但不是100.00.3而不是100.00.3^-?(?!0)(?:\d+|\d{1,3}(?:\.\d{3})+)$ - > -100.03失败Bar*_*mar 11
第二种选择不匹配的原因是因为它只允许\f小数点后的单个.这需要\d+.
然后你需要在组之间^和$组中包装所有内容,因此所有选项都匹配整个字符串.
你有很多冗余的括号.而\d*在最后的选择应该是\d+,否则你会允许一个数字,是完全空或只是一个标志.
^[+-]?([0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?|\d*\.\d+|\d+)$
Run Code Online (Sandbox Code Playgroud)
^ - >字符串的开头[+-]?- >匹配optional +或-char([0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?|\d*\.\d+|\d+)- >整个基团具有以匹配[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)或\d*\.\d+或\d+
[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+) - >匹配数字与千位分隔符和小数分隔符\d*\.\d+ - >匹配带小数分隔符的数字,也可能是小数点前的数字\d+ - >匹配没有小数分隔符的数字$ - >字符串结束您可以使用此正则表达式进行验证:
^[+-]?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d*)?$
Run Code Online (Sandbox Code Playgroud)
它匹配以下情况:
,第 3 位带有分隔符的数字| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |