【问题标题】:Regexp only one dot and digits正则表达式只有一个点和数字
【发布时间】:2013-08-30 04:09:20
【问题描述】:

我在使用正则表达式时遇到了一些问题; 我只想在字符串中留下有效数字,人们可能会输入:

  1. 11.2.2

  2. abd11,asd11

等等,

str = .replace(/[^[0-9]{1,2}([.][0-9]{1,2})?$]/g, '');

所以我需要只允许用户输入的任何内容中的数字和一个点;

This answer 但是当我尝试将其放入时不起作用:

str.replace(/(?<=^| )\d+(\.\d+)?(?=$| )|(?<=^| )\.\d+(?=$| )/,'');

它给了我一个 JS 错误。请帮助我了解我做错了什么。

p.s:感谢大家的帮助,我找到了解决方案HERE,所以我认为线程可能已关闭。

【问题讨论】:

  • Javascript 不支持诸如(?&lt;=^| ) 之类的lookbehinds。
  • abd11 会发生什么 - 应该完全删除还是变成 abd
  • @TimPietzcker:甚至只有 11 个?
  • 负数呢?

标签: javascript regex


【解决方案1】:

使用正则表达式

\d*[0-9]\.\d*[0-9]

【讨论】:

  • str = str.replace(/[^\d*[0-9]\.\d*[0-9]]/g, '');允许 11.11.1
  • @ailmcm 请再次检查:即使您有疑问,请在regexpal.com验证它是正确的
  • 如何更新以允许前导负号?例如-1.222
【解决方案2】:

您必须使用引号。像这样:

str.replace("/(?<=^| )\d+(\.\d+)?(?=$| )|(?<=^| )\.\d+(?=$| )/",'');

【讨论】:

  • 在 Javascript 中向后看?
【解决方案3】:

怎么样:

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

这将匹配:

12
12.34
.34

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多