【问题标题】:regex to catch any currency under $300K正则表达式捕获任何低于 30 万美元的货币
【发布时间】:2019-06-07 19:51:55
【问题描述】:

我需要在货币字段中标识任何低于 300,000 的值。我创建了一个正则表达式,可以对 100 万以下的任何数字执行此操作,但我需要将其削减为 299,999.99 美元。

100万的代码如下。

^\$?\d{0,3}?\d{0,2},?\d{0,3}(\.(\d{0,2}))?$

【问题讨论】:

  • 为什么需要正则表达式?不能用比较运算符吗?

标签: regex pcre


【解决方案1】:

您可以使用以下正则表达式: ^\$[0-2]?[0-9]{0,2},?[0-9]{0,3}(\.[0-9]+)?$

See the explanation on regex101...

Here you can visualize your regular expression...

【讨论】:

    【解决方案2】:

    在这里,正则表达式不是您的最佳选择。

    为了说明这一点,我将使用您为 100 万美元的案例发布的正则表达式。在我看来,您正在尝试适应各种条件,包括:

    $10      vs.  $10.00
    $100     vs.  100
    $100     vs.  $10000
    $10,000  vs.  $100,000
    etc.
    

    但是你这样做的方式允许这样的事情:

    $10000000.00
    

    因为:

    $            matches  ^\$?
    100          matches  \d{0,3}?
    00           matches  \d{0,2}
    [no comma ]  matches  ,?
    000          matches  \d{0,3}
    .00          matches  (\.(\d{0,2}))?$
    

    (使用https://regex101.com/ 测试)

    换句话说,您尝试匹配诸如小数不存在逗号和大数存在逗号,以及可能出现在小数、中数和大数中的各种数字分组会导致正则表达式匹配一个远大于 100 万美元的数字。

    虽然正则表达式非常通用,并且现代正则表达式引擎非常强大,但是一个健壮的正则表达式来执行您正在尝试做的事情会很麻烦、难以阅读和难以维护。

    它也足够复杂,它会展示正则表达式可以被正确地视为一种编程语言的方式。

    但最重要的是,任何正则表达式都是在周围编程语言的上下文中使用的,那么为什么不直接使用编程语言本身的功能呢?可能需要更多的输入,但可能需要更少的时间,而且结果会更容易编写、阅读和维护。

    【讨论】:

      【解决方案3】:

      给你,$300,000.00 - $1,000,000.00

      (?<!\S)\$?(3\d{2},?\d{3}|[4-9]\d{2},?\d{3}|10{6}|1,?000,?000)(\.\d{0,2})?(?!\S)

      可读版本

       (?<! \S )
       \$?
       (                             # (1 start)
            3 \d{2} ,? \d{3} 
         |  [4-9] \d{2} ,? \d{3} 
         |  1 0{6}
         |  1 ,? 000 ,? 000
       )                             # (1 end)
       (                             # (2 start)
            \.
            \d{0,2} 
       )?                            # (2 end)
       (?! \S )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-30
        • 2017-09-20
        • 2017-03-30
        • 2021-08-14
        • 1970-01-01
        相关资源
        最近更新 更多