Javascript 正则表达式货币

Javascript regex currency

我正在尝试创建满足以下条件的正则表达式:

  1. 0.01 - 真
  2. 01.01 - 错误
  3. 122343.10 - 真
  4. 123,432.10 - 错误
  5. 123 - 错误
  6. 123423.1 - 错误

我做了以下但没有按预期工作

^[0\.|1-9\d*\.]\d{2,2}$/

使用https://regexr.com/进行测试

我会使用这个正则表达式:

^(?!0\d)\d+\.\d{2}$

这在开始时使用负先行来处理货币值不能以零开头的要求,如果另一个数字紧随其后。

Demo

这是另一种方法:

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

这是说要匹配一个零,后面没有小数点,或者如果后面是小数点前的另一个数字,则为 1-9。

Tim Biegeleisen 比我领先几分钟,但这是另一个(不太复杂的)解决方案:

(^[0]|^[1-9]+)\.\d{2}$

https://regex101.com/r/QJ3YyQ/2

编辑: 我刚刚意识到我错过了一个边缘案例。如果小数点前的数字包含零,则不匹配。这是一个更新的正则表达式:

(^[0]|^[1-9]\d*)\.\d{2}$

https://regex101.com/r/QJ3YyQ/4