gpt4 book ai didi

javascript - 更新正则表达式模式以允许 .xx 而不是仅 0.xx

转载 作者:行者123 更新时间:2023-11-29 21:00:11 24 4
gpt4 key购买 nike

我有一个正则表达式,用于测试需要货币的用户输入。此语句允许可选的美元符号,允许可选的逗号(只要它们放置正确),并允许单个小数点,只要它后跟至少另一个数字。

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

例如

  • 12.12 美元
  • 0.34
  • 12,000
  • 12,000000

都是设计允许的。然而,有一个与我想要的不匹配。如果用户想要输入像 .34 这样的数字,则必须在其前面加上一个零。所以 0.34 匹配,但 .34 不匹配。

以下是我更新声明以解决此问题的方法。

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

我已将小数点前的整个语句设为捕获组,并将其设为可选。不过,我现在担心的是,我的整个正则表达式语句都包含在两个可选的捕获组中。我不想要一个空格来匹配这个模式,我认为它会。我想要完成的事情有更好的选择吗?

编辑:我的原始语句不匹配 .12 然而,第二个更新的语句匹配,因为整个语句包含在可选的捕获组中,空格将匹配此模式,这是不需要的。

最佳答案

您的可选组是继续进行的正确方法。请注意,当您以后不必访问捕获的子值时,仅用于对子模式序列进行分组的非捕获组效率更高。

您唯一真正想念的是避免匹配空字符串。您可以使用正先行 (?=.)(?!$) 负先行来实现它:

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

参见 regex demo

详情

  • ^ - 字符串的开始
  • (?!$) - 字符串开头后没有字符串结尾
  • (?: - 可选非捕获组的开始
    • \$? - 1 或 0 个 $ 符号
    • \d{1,3} - 1 到 3 位数字
    • (?:- 非捕获组的开始重复 0+ 序列
      • ,? - 1 或 0 个逗号
      • \d{3} - 3 位数字
    • )* - 非捕获组结束
  • )? - 可选的非捕获组结束
  • (?:\.\d{1,2})? - 可选的非捕获组匹配 1 或 0 个序列
    • \. - 一个点
    • \d{1,2} - 1 或 2 位数字
  • $ - 字符串结尾。

关于javascript - 更新正则表达式模式以允许 .xx 而不是仅 0.xx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46931184/

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