【问题标题】:Regular Expression for negative money values?负货币值的正则表达式?
【发布时间】:2013-02-02 03:18:04
【问题描述】:

我想要一个可以处理与金钱相关的数字的正则表达式。目前我正在使用这个:

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

我的测试集包含以下数字,我希望将其声明为有效。我还提到了每个数字,使用上述正则表达式验证时的验证结果是什么:

123456789012345 //valid
123456789012345.34 //valid

123,456,789,012,345 //valid
123,456,789,012,345.34 //valid

-123,456,789,012,345 //not valid
-123,456,789,012,345.34 //not valid

它似乎适用于除负值之外的所有内容。

其次,它似乎适用于开头带有$ 的值。是否可以将其修改为在开始时接受USD$,而不仅仅是$,以便以下数字有效?:

USD$123,456,789,012,345
USD$123,456,789,012,345.34

【问题讨论】:

标签: regex currency


【解决方案1】:

也匹配负数,并匹配USD$ 而不是 $
您可以将^\$? 更改为^(?:USD\$)?-?

【讨论】:

    【解决方案2】:

    其实很简单:

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

    我已将\$? 替换为:

    (?:(?:USD)?\$)? - 这匹配一个可选的$-符号,可选地在它前面加上USD

    并补充:

    (?:-)? - 匹配第一个数字之前的可选-

    我还在末尾将{0,1} 缩写为?。这是同一件事。

    RegExr demo

    如果您想消除一些混乱,根据 Bergi 的评论,您可以稍微简化一下:

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

    我不想碰其他非捕获组。

    【讨论】:

    • 这将允许USD 没有$
    • (?:-) 有点夸张了吧?
    • @Bergi 好吧,这似乎符合 OP 已经拥有的整个模式。不想打破潮流。
    • @Ahmad 请注意,此解决方案还允许$-符号前面没有USD。不确定这是否真的是你想要的。如果没有:使用MikeM's answer,只允许USD$,不允许$
    猜你喜欢
    • 2021-12-22
    • 2012-11-30
    • 1970-01-01
    • 2022-11-26
    • 2010-10-23
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    相关资源
    最近更新 更多