我需要使用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
我的正则表达式知识很弱,有人可以帮助我吗?
答案 0 :(得分:9)
这样做你想要的吗?
^\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})?$
答案 1 :(得分:3)
我会试试这个正则表达式:
\d+(?:\.\d{3})*?,\d{2}
它说的是:
- 匹配数字直到
一个。找到一个点后跟3位数(此步骤可以重复几次)
湾或者发现后跟2位数字的逗号
编辑:
- 感谢评论,我忘记了第一个值的约束
更新的正则表达式
\d{1,3}(?:\.\d{3})*?,\d{2}
答案 2 :(得分:0)
补充马克的回复:
谁需要“.”在字符串中而不是“,”来计算美分。并且需要在文本中间找到值:
(?:[1-9]\d{0,2}(?:\,\d{3})*|0)(?:.\d{1,2})?