【问题标题】:Javascript string() function returns correct value in IE, FF but not in chrome when used on amount = "$ 75.00 USD"Javascript string() 函数在金额 = "$ 75.00 USD" 上使用时在 IE、FF 中返回正确值,但在 chrome 中不返回
【发布时间】:2020-02-21 19:22:57
【问题描述】:

我目前遇到一个似乎无法解决的问题。

var amount = "$ 75.00 USD";

我只想要 75.00 部分。我尝试了以下方法:

var new_str = amount.split(" ");

这在 chrome 中给了我以下结果:

0: "$ 75.00" 1:“美元”

所以我找到了另一种解决方法:

var new_str = amount.substring(amount.indexOf(' '), 2).replace(',','');

这给了我 75.00,正如我在 Chrome 和 FF 中想要的那样。

问题是在 IE 中它给了我 0。

但是,当我尝试时

var new_str = amount.split(" ");

在 IE 中

0: "$" 1:“75.00” 2:“美元”

我只是想找到一个对两者都有效的函数。我当然可以创建一个 if 语句,但我只是认为 split 应该可以工作。

还有其他人遇到过这个问题吗?

最佳关

【问题讨论】:

  • 改用正则表达式
  • 如果amount.split(" "); 返回["$ 75.00", "USD" ],那么第一个“空格”不是常规空格字符。
  • "$ 75.00 USD".split(" ") 在 Chrome 中按预期工作,将字符串分成三个块。看起来好像您的字符串中的空格有所不同。也许在那里寻找可能的答案:stackoverflow.com/questions/10319539/…
  • 当我在 Chrome 中打开控制台并运行您的第一个示例时,我将字符串按预期分成三部分:['$', '75.00', 'USD']
  • 在 Firefox 中相同(3 元素数组)

标签: javascript string google-chrome


【解决方案1】:

类似于 @mbojko 解决方案,但我们寻找 number - dot - number 模式,而不是去除非数字值:

const amount = "$ 75.00 USD $ 80.01 EUR";
const matches = amount.match(/\d+\.?\d*/g);

console.log(matches[0]);
console.log(matches[1]);

如您所见,它也适用于多次重复。

【讨论】:

    【解决方案2】:

    一种解决方案是过滤掉不是数字或小数分隔符的所有内容。

    const amount = "$ 75.00 USD";
    const sanitizedAmount = amount.replace(/[^0-9.]/g, '');
    
    console.log(parseFloat(sanitizedAmount));

    (应该适用于字符串中所有可能的疯狂字符)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多