7

我需要使用 Javascript 验证一些包含巴西货币(其名称为“Real”)的表单文件。它具有以下格式:

            0,01
            0,12
            1,23
           12,34
          123,45
        1.234,56
       12.235,67
      123.456,78
    1.234.567,89
   12.345.678,90
  123.456.789,01
1.234.567.890,12

我的正则表达式知识很薄弱,有人可以帮助我吗?

4

3 回答 3

15

这是做你想做的吗?

^\d{1,3}(?:\.\d{3})*,\d{2}$

这就是说“1 到 3 位数字,可选地后跟任意数量的三位数组,前面是句点,后跟一个逗号和另外两个数字。” 如果您想允许示例中出现前导空格,请\s*在前面添加:

^\s*\d{1,3}(?:\.\d{3})*,\d{2}$

编辑:正如@ElRonnoco 指出的那样,上面的正则表达式接受前导零(例如010.100,00)。要禁止这些,您可以使用这个更长的版本:

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

编辑 2上面的正则表达式都匹配一个包含单个货币金额的字符串,没有别的。从问题中不清楚这是否是意图。

编辑 3要允许没有小数部分或只有一位小数的数字,请将其更改如下:

^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$
于 2012-04-24T15:26:35.453 回答
3

我会试试这个正则表达式:

\d+(?:\.\d{3})*?,\d{2}

它说的是:
- 匹配数字直到
a。找到一个点后跟 3 位数字(此步骤可以重复多次)
b. 或找到一个逗号后跟 2 位数字

编辑:
- 感谢您的评论,我忘记了第一个值
更新正则表达式的约束

\d{1,3}(?:\.\d{3})*?,\d{2}
于 2012-04-24T15:24:36.053 回答
0

补充马克的回复:

谁需要 ”。” 在字符串中而不是“,”来计算美分。并且需要在文本中间找到值:

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

https://regexr.com/61166

于 2021-06-30T13:06:50.573 回答