【问题标题】:Using Regular Expressions with Javascript replace method使用带有 Javascript 替换方法的正则表达式
【发布时间】:2009-04-20 10:16:41
【问题描述】:

朋友们,

我是 Javascript 和正则表达式的新手,希望您能提供帮助!

在 Javascript 函数中,我需要检查逗号 (,) 是否出现 1 次或多次。如果是这样,那么它的任一侧都应该有一个或多个数字。

例如

1,000.00 可以

1,000,00 没问题

,000.00 不行

1,000.00 不行

如果满足这些条件,我希望删除逗号,以便 1,000.00 变为 1000.00

我尝试过的是:

var x = '1,000.00';

var regex = new RegExp("[0-9]+,[0-9]+", "g");

var y = x.replace(regex,"");

警报(y);

当运行警报时显示“.00”这不是我所期望或想要的!

提前感谢您提供的任何帮助。

强文本 编辑 强文本

感谢所有到目前为止的输入和给出的 3 个答案。不幸的是,我认为我没有很好地解释我的问题。

我想要实现的是:

如果文本中有逗号,并且其两侧有一个或多个数字,则删除逗号,但保留字符串的其余部分。

如果文本中有逗号,并且两边都没有至少一个数字,则什么也不做。

所以使用我上面的例子:

1,000.00 变为 1000.00

1,000,00 变为 100000

,000.00 保留为,000.00

1,000.00 保留为 1,000.00

为混乱道歉!

【问题讨论】:

  • 只删除字符串中的所有逗号有什么问题...例如String.replace(',','');
  • 感谢吉米的评论。这也是我的第一个解决方案!不幸的是,某些字段允许将逗号作为格式的一部分包含在内。因此,在我让用户离开该字段并且他们输入了逗号之前,任何一方都必须至少有一个数字。基本上它是为了阻止用户输入 1,,,,,,,,,,,,,,,,000 等

标签: javascript regex


【解决方案1】:

您的正则表达式在订单数高于 1000 时不会非常灵活,并且在输入没有逗号时会出现问题。更有问题的是,您还要匹配和替换您感兴趣的部分数据!

最好有一个匹配有问题的表单的正则表达式并将它们删除。

以下匹配(按顺序)输入开头的逗号,输入结尾的逗号,前面是一些非数字,或者后面是一些非数字。

var y = x.replace(/^,|,$|[^0-9]+,|,[^0-9]+/g,'');

顺便说一句,如果您碰巧能够做到lookbehind,那么所有这一切都会容易得多,但几乎每个 JS 实现都没有。

根据问题更新进行编辑:

好的,我不会试图理解为什么你的规则是这样的,但是正则表达式更容易解决它:

var y = x.replace(/(\d),(\d)/g, '$1$2');

【讨论】:

  • 当然,好点,但 OP 需要同时进行前瞻和后退。如果它很重要,您可以对其进行基准测试,但我认为多个操作会比上面的正则表达式更笨重。
  • 您好 annakata,感谢您的解决方案 - 第二个正是我所需要的。再次感谢!问候伊恩
【解决方案2】:

我会使用类似以下的内容:

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)$
  • [0-9]{1,3}:1 到 3 位数字
  • (,[0-9]{3})*:[可选] 更多以逗号分隔的数字三元组
  • (\.[0-9]+): [可选] 点 + 更多数字

如果此正则表达式匹配,您就知道您的号码是有效的。之后只需将所有逗号替换为空字符串即可。

【讨论】:

  • 不错的答案,首先检查您的号码的正确性。完成此操作后,您只需删除每个逗号...
【解决方案3】:

在我看来你有三个错误条件

  1. ",1000"
  2. “1000”,
  3. “1,000”

如果其中任何一个为真,那么您应该拒绝该字段,如果它们都是假的,那么您可以以正常方式去除逗号并继续。这可以是一个简单的替换:

^,|,,|,$

【讨论】:

    【解决方案4】:

    我只会删除除数字和小数点分隔符 ([^0-9.]) 之外的任何内容,然后通过 parseFloat() 发送输出:

    var y = parseFloat(x.replace(/[^0-9.]+/g, ""));
    

    【讨论】:

      【解决方案5】:
      // invalid cases:
      // - standalone comma at the beginning of the string
      // - comma next to another comma
      // - standalone comma at the end of the string
      var i,
          inputs = ['1,000.00', '1,000,00', ',000.00', '1,,000.00'],
          invalid_cases = /(^,)|(,,)|(,$)/;
      for (i = 0; i < inputs.length; i++) {
          if (inputs[i].match(invalid_cases) === null) {
             // wipe out everything but decimal and dot
             inputs[i] = inputs[i].replace(/[^\d.]+/g, '');
          }
      }
      console.log(inputs); // ["1000.00", "100000", ",000.00", "1,,000.00"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 2016-09-23
        相关资源
        最近更新 更多