【问题标题】:JavaScript - RegEx that matches any number between 0.01 and 99JavaScript - 匹配 0.01 到 99 之间任意数字的正则表达式
【发布时间】:2021-03-09 20:31:21
【问题描述】:

我正在处理一个表单,其中有一个 “利率” 字段,其接受值介于 0.01 和 99.00 之间

我已经查看了来自 0.01 to 99.99 in a regular expression 的 RegEx Up。这几乎可以解决问题。我遇到的唯一挑战是让它不匹配从 99.01 到 99.99 的数字。

我已对其进行了更新,以适应小数点后最多 10 位数字。

测试数据:

应该只匹配 0.01 到 99.00 之间的数字

不应该匹配

  • 00.00
  • 100.134234
  • 99.01234 // 这是匹配的,但不应该与我当前的 RegEx 匹配。
  • 100

应该匹配

  • 0.01
  • 0.10
  • 1.233
  • 3.20
  • 4.655
  • 5.112
  • 99.00
  • 99.0

我已经创建了一个RegEx101 Sandbox,我觉得它可能有用。

【问题讨论】:

  • 这也有效。谢谢@WiktorStribiżew 的替代方案:)
  • 这也适用于99.0 案例。

标签: javascript regex


【解决方案1】:

这是我的方法:

^(?:(?![0.]+$|99)|(?=(?:99|99\.0+)$))\d{1,2}(?:\.\d+)?$

test cases

  • \d{1,2}(?:\.\d+)? 匹配 1-2 位数字,可选地后跟小数点和一些数字
  • (?:(?![0.]+$|99)|(?=(?:99|99\.0+)$))
    • (?![0.]+$|99) 测试号码是否仅由0. 或以99 开头,失败。这消除了099
    • |(?=(?:99|99\.0+)$) 除非数字是纯的9999 后跟一个小数点和一堆0s,让它过去吧。

【讨论】:

    【解决方案2】:

    在开头,为 99 添加一个负前瞻,后跟除 .00 之外的任何内容:

    (?!99\.0*[^0\n])
    

    https://regex101.com/r/R63oyb/10

    不包括99.0199.10等,但允许99.0099

    【讨论】:

    • @SiddAjmera /^(?!99\.0?[^0]$)(?=.*[1-9])\d{0,2}(?:\.\d{0,10})?$/.test('99.0') 根据需要产生true,对吧?
    • 我猜我打开了太多 RegEx101,可能检查错了。我的错。道歉。一切都好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多