gpt4 book ai didi

regex - 货币正则表达式

转载 作者:行者123 更新时间:2023-12-01 07:11:05 25 4
gpt4 key购买 nike

我想我为我需要的东西创建了一个有效的正则表达式。只是想知道是否有人可以打破它或看到更短的写法。

正则表达式应验证以下内容...

  • 美元符号可选
  • 负数用括号表示,而不是减号
  • 如果为负,美元符号应在括号之外
  • 逗号是可选的
  • 最大号码为 999999.99
  • 最小号码是 (999999.99)
  • 小数不必提供,但如果提供,不超过两个
    数字

  • 所以这里有一些有效的例子......
    9
    $9
    $0.99
    ($999,999.99)
    (999999)
    ($999999)
    (999,999)
    99,999.9

    这是我想出的:
    ^\$?(((\d{1,6}(\.\d{1,2})?)|(\d{1,3},\d{3}(\.\d{1,2})?)|\(((\d{1,6}(\.\d{1,2})?)|(\d{1,3},\d{3}(\.\d{1,2})?))\)))$

    更正,我的规范是错误的,如果使用美元符号,它必须在括号内。

    最佳答案

    这是一个较短的替代方案(56 个字符到 114 个字符),它几乎适用于所有正则表达式:

    ^\$?(?=\(.*\)|[^()]*$)\(?\d{1,3}(,?\d{3})?(\.\d\d?)?\)?$

    示例: http://www.rubular.com/r/qtYHEVzVK7

    解释:
    ^                # start of string anchor
    \$? # optional '$'
    (?= # only match if inner regex can match (lookahead)
    \(.*\) # both '(' and ')' are present
    | # OR
    [^()]*$ # niether '(' or ')' are present
    ) # end of lookaheand
    \(? # optional '('
    \d{1,3} # match 1 to 3 digits
    (,?\d{3})? # optionally match another 3 digits, preceeded by an optional ','
    (\.\d\d?)? # optionally match '.' followed by 1 or 2 digits
    \)? # optional ')'
    $ # end of string anchor

    关于regex - 货币正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848570/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com