Javascript 带有最小值和千位分隔符的数字的正则表达式

Javascript 带有最小值和千位分隔符的数字的正则表达式,javascript,regex,Javascript,Regex,我正在尝试编写一个正则表达式来验证一个数字,该数字要么是0,要么至少是1000,还允许用逗号表示1000分隔符 ^(([1-9]{1}[0-9]{3,})|0)$ 我得到的最接近的结果是它正确地验证了数字部分,但没有验证千位分隔符 ^(([1-9]{1}[0-9]{3,})|0)$ 测试用例: 允许: 0 1000 50000 1,000 50,000 99,992,001 不允许: 00 0001 999 1,1,00 1.000.000 anystring 首先:在使用正则表达式处理

我正在尝试编写一个正则表达式来验证一个数字,该数字要么是0,要么至少是1000,还允许用逗号表示1000分隔符

^(([1-9]{1}[0-9]{3,})|0)$
我得到的最接近的结果是它正确地验证了数字部分,但没有验证千位分隔符

^(([1-9]{1}[0-9]{3,})|0)$
测试用例:

允许:

0
1000
50000
1,000
50,000
99,992,001
不允许:

00
0001
999
1,1,00
1.000.000
anystring

首先:在使用正则表达式处理此类事情之前,请仔细考虑!正则表达式可能(正确地)看起来像是一个强大的工具,但使用它们会牺牲一些强大的数字处理工具以及代码的清晰性/可维护性

但是,如果您有理由坚持使用正则表达式,我认为这一个可以满足您的需要:

^(0|[1-9]\d{0,2}((\d{3})+|(,\d{3})+))$
它选择:

  • 要么是零;或
  • 一个非零数字,然后最多两个其他数字,后面是一批数字,一次三个,要么全部用逗号分隔,要么没有
您可以看到它在这里工作:

试试:

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

这个正则表达式应该可以:

^(?:0|[1-9][0-9]{3,}|[1-9][0-9]{0,2}(?:,[0-9]{3})+)$

这不是一个答案,但你为什么要使用正则表达式呢。当然,将其解析为浮点,然后检查最小值和最大值会更容易处理?@scragar-不,它不会(根据)。此外,你应该在答案部分发布答案,而不是评论。我匆忙地写了这个问题,所以它不完全准确。我需要验证字符串而不是数字。它用于MVC表单验证程序,以防止用户输入无效金额。嗯,不幸的是,我认为这不会起作用-它将匹配诸如“1000000”之类的内容,虽然可能正式使用询问者的摘要,但可能不应该考虑使用案例。非常优雅的解决方案,谢谢。我还需要一个版本,将做同样的,但要么是0或至少100。我用了这个^(0{1-9]\d{0,2}((\d{3})+{124;(,\ d{3})+){[1-9]\d{2})$