【问题标题】:Removing all instances of a character from a string从字符串中删除一个字符的所有实例
【发布时间】:2014-09-15 22:16:07
【问题描述】:

我正在尝试从 jQuery/Javascript 中的字符串中删除给定字符集 £$€,. 的所有实例。我正在使用replace 函数,但是这似乎只删除了角色的单个实例,而不是全部。

例如考虑字符串:

1,500,00.00.$djdjd£10€10

我回来了:

1500,0000.djdjd1010

如您所见,它只删除每个字符的一个实例。 £, $ 很好,因为每个字符串中只有一个。

这是我目前所拥有的:

function validatePriceRange(value, min, max) {

    var replacements = ["£", "$", "€", ",", "."];

    $.each(replacements, function (index, item) {
        value = value.replace(item, "");
    });

    var value = parseInt(value, 10);

    return value >= min && value <= max;
}

jsFiddle

谁能发现我做错了什么?

【问题讨论】:

    标签: javascript jquery string replace


    【解决方案1】:

    以字符串作为第一个参数调用replace 仅进行一次替换,而使用带有标志g 的正则表达式将替换所有匹配项。

    使用正则表达式,您还可以避免遍历数组并一次性完成:

    value = value.replace(/£|\$|€|,|\./g,'');
    

    【讨论】:

    • 完美 - 感谢您对替换工作原理的解释。我无知地认为它的工作方式与 .Replace()C# 中的工作方式相似。
    【解决方案2】:

    您只需在替换数组中循环一次,并在每次特定字符时替换。 但是 replace 只是替换给定字符串的第一次出现

    对于全部替换方法,请查看here

    【讨论】:

    • 耶,指着现有的解决方案岩石。我可能会考虑通过将 ReplaceAll 设为 String 的原型来扩展该解决方案。
    【解决方案3】:

    我认为你不需要一个函数:

    var validated = parseInt('1,500,00.00.$djdjd£10€10'.replace(/[£$€,.]/g,''), 10);
    //=> 15000000
    // or if you want the validated directly
    var validated = function(min,max) {
                      var v = parseInt('1,500,00.00.$djdjd£10€10'
                                        .replace(/[£$€,.]/g,''), 10);
                      return v >= min && v <==max;
                    }(1000, 200000); //=> false
    

    如果你想在字符串中包含所有个数字,正则表达式应该不同:

    var validated = function(min,max) {
                      var v = parseInt('1,500,00.00.$djdjd£10€10'
                                        .replace(/[^\d]/g,''), 10);
                      //                           ^ replace non numbers
                      // v now is 150000001010
                      return v >= min && v <==max;
                    }(1000, 200000); //=> false
    

    【讨论】:

      【解决方案4】:

      使用带有全局标志的正则表达式,它将搜索和替换所有实例

      var replacements = ["£", "\\$", "€", ",", "\\."];
      $.each(replacements, function (index, item) {
          value = value.replace(new RegExp(item, "g"), '');
      });
      

      演示:Fiddle

      【讨论】:

        【解决方案5】:

        正如已经回答的here,您可以使用以下正则表达式将所有非字符和空格替换为空。

        var value = "1,500,00.00.$djdjd£10€10"
        value = value.replace(/[^\w\s]/gi, '')
        

        【讨论】:

          猜你喜欢
          • 2015-04-22
          • 2021-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-06
          • 2018-08-22
          • 2018-09-23
          • 1970-01-01
          相关资源
          最近更新 更多