【问题标题】:Allow only a single point in decimal numbers只允许十进制数字中的一个点
【发布时间】:2013-08-09 14:31:06
【问题描述】:

如何修改这个正则表达式以允许只有一个点的数字?

/[^0-9\.]/g

目前允许:

  • 0
  • 0.13
  • 0.13.1(这应该是不允许的)

【问题讨论】:

  • 这个页面右侧链接了很多类似的问题。您在写问题时没有看到它们吗?
  • 你不需要在字符类中转义点
  • @dystroy,我在发帖前进行了彻底的搜索,但没有一个提供令人满意的答案。并且没有一个正确指向我要问的内容
  • 试图查找副本,但 this one 已关闭。它回答了你的问题吗?你能从那里的(相当好的)解释中弄清楚吗?

标签: javascript regex


【解决方案1】:

您的正则表达式与您所说的不匹配。您在字符类中使用了 negation ,并且也没有任何量词。目前它会匹配除.之外的任何非数字字符。

根据您的要求,您可以使用此正则表达式:

/^\d+(\.\d+)?$/

【讨论】:

  • +1 因为你首先得到正确答案(不是第一个答案,但我看到了编辑):)
  • @rps:不,括号和空格不属于。
  • @rps。语法很好。但这并不符合你的想法。我建议你阅读Character Classes。一个字符类只匹配其中包含的所有字符中的一个字符。此外,元字符在字符类中没有任何特殊含义。因此,[\d+] 不匹配 1 个或多个数字,但它匹配 \d+
  • @rps。是的,现在它可以正常工作了。它现在相当于我上面写的。您可以从管道中取出常见模式,并使用 ? 量词将其余不常见模式设为可选
  • @rps:是的,看起来不错。不过,第二个 + 可能是 *,因为(至少对 JavaScript 和大多数人来说,我认为).5 是一个有效数字。
【解决方案2】:

使匹配成为积极的:

/^\d*(\.\d+)?$/

任意数量的数字,可选地后跟一个点和至少一个数字。但是保持否定匹配是不值得的。

如果你想禁止空字符串(原来的正则表达式不会这样做),你可以这样做:

/^(?=.)\d*(\.\d+)?$/

但你也可以只检查一个空字符串,反正看起来更好。

【讨论】:

  • 这甚至会匹配一个空字符串。
  • @HamZa:但谁知道呢。
  • 基本上一个糟糕的问题不会得到完整的答案。不过应该有一个 dup ...
【解决方案3】:

我想这应该是 /^(\d*)\.{0,1}(\d){0,1}$//^(\d*)\.?(\d){0,1}$/

  • (\d*) 表示小数点前的位数。

  • \. 后跟 {0,1}? 将确保只有一个点。

  • (\d){0,1} 只允许小数点后一位。

【讨论】:

    【解决方案4】:

    你可以试试下面的正则表达式 ^[-+]?\d*.?\d*$

    【讨论】:

      【解决方案5】:

      试试,

      (value.match(/^\d+([.]\d{0,1})?$/))
      

      【讨论】:

      • [.]\.; {0,1}?; value.match(x)x.test(value)
      【解决方案6】:

      尝试以下方法:

      /^(\d*)(\.\d*)?$/g
      

      【讨论】:

      • 匹配组没用
      • 不是如果你想手动检查它们......谁知道他的用例是什么
      • 使\d* 可选也不会做任何事情,这允许空字符串,这允许单个点。但谁知道呢。
      • 对其进行了修改,以便最后一个表达式只能选择性地找到 .和一组数字作为可选的单个组
      猜你喜欢
      • 2019-04-22
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      相关资源
      最近更新 更多