Angular 中的货币正则表达式

Currency regex in Angular

我需要 Angular 中货币正则表达式的帮助。 我不太擅长正则表达式。

我想要的是一个正则表达式:

  1. 允许逗号作为数字组分隔符,但不能在开头或结尾。
  2. 只允许保留 2 位小数点后四舍五入的数字。
  3. 只允许有一个小数点并且不能在开头或结尾。
  4. 不允许 0.00 或 0。

这是我的正则表达式:

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

但是这个正则表达式允许 0.00

请哪位大侠帮忙谢谢

期望的输出

有效:

1,000.00

1000

0.01

24

1,234,000

11,222,245.22

无效:

,000.00

,,,,,9

0

0.00

1,22,2,

1,000.

123,123,22

000,300.00

000300.00

000,123

000,000

00,000

0,000

您可以使用

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

regex demo

详情

  • ^ - 字符串开头
  • (?![0.,]+$) - 如果有一个或多个 0,. 字符直到字符串结尾[=46=,则匹配失败的否定前瞻]
  • (?:0|[1-9]\d{0,2}(?:,\d{3})*|[1-9]\d* - 三种选择之一:
    • 0 - 零
    • |
    • [1-9]\d{0,2}(?:,\d{3})* - 一到三位数字,第一个是 non-zero,然后是逗号的 0 次或多次重复,然后是三位数字
    • | - 或
    • [1-9]\d* - 1+ 位,第一个是 non-zero,
  • (?:\.\d{1,2})? - . 的可选序列,然后是 1 或 2 个数字
  • $ - 字符串结尾。