我需要使用 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
我的正则表达式知识很薄弱,有人可以帮助我吗?
这符合你的要求吗?
^\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}$
要允许没有小数部分或只有一位小数的数字,请按如下方式更改:
^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$
如果您想在较长的字符串中找到此类字符串而不是要求它们匹配整个字符串,您可以删除
^
和 $
锚点。
我会尝试一下这个正则表达式:
\d+(?:\.\d{3})*?,\d{2}
它说的是:
- 匹配数字直到
A。找到一个点后跟 3 位数字(此步骤可以重复几次)
b.或者找到逗号后跟 2 位数字
编辑:
- 感谢您的评论,我忘记了第一个值的约束
更新了正则表达式
\d{1,3}(?:\.\d{3})*?,\d{2}
补充马克的回复:
谁需要“。”在字符串中而不是“,”来计算分。并且需要找到文本中间的值:
(?:[1-9]\d{0,2}(?:\,\d{3})*|0)(?:.\d{1,2})?