【问题标题】:Regex to validate brazilian money using Javascript使用 Javascript 验证巴西货币的正则表达式
【发布时间】:2012-04-24 15:19:35
【问题描述】:

我需要使用 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

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

【问题讨论】:

    标签: javascript regex validation currency


    【解决方案1】:

    这是你想要的吗?

    ^\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}$
    

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

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

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

    【讨论】:

    • @MarkReed:最新的正则表达式中缺少一个括号:(?:[1-9]\d{0,2})(?:\.\d{3})*|0),\d{2} 问题:正则表达式中的 |0 部分应该做什么?
    • @Joanna - 不,右括号是 |0 之后的括号。这允许像前两行(“0,01”,“0,10”)这样的形式,否则新的正则表达式将不允许这些形式,因为它们以 0 开头。
    • @MarkReed - 有道理,我误读了前面的正则表达式。谢谢解释
    • @MarkReed,它有效,但我只需要改进一件事,我如何定义像“1”和“1,2”这样的值是有效的?
    • @MarkReed,完美运行!伙计,我不知道如何感谢你!你给了我很大的帮助!非常感谢!
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 请注意,这接受任意数量的数字而无需分组。所以这取决于OP想要有多严格..
    • 正如马克所说,这将接受12345.123,00,例如,有效
    【解决方案3】:

    补充马克的回复:

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

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

    https://regexr.com/61166

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多