【问题标题】:how to replace multiple special character in a number?如何替换数字中的多个特殊字符?
【发布时间】:2015-07-29 07:03:00
【问题描述】:

我有一个数字,例如 2,500.00,我想将该数字转换为 2.500,00。因此,我们可以使用 replace like 替换特殊字符

var x = 2,500.00; 
x.replace(/,/g,".");

对于“Dot”,我们也可以做到。但在这种情况下,它不起作用,因为当我们像上面那样应用逗号替换功能时,数字将变为 2.500.00,如果我们现在应用,它将变为 2,500,00。

那么有什么方法可以将 2,500.00 转换为 2.500,00 吗?

【问题讨论】:

  • 先换成别的东西,比如*。例如, -> *,然后是. -> ,,最后是* -> .。
  • 感谢您的帮助evolutionbox,但我认为这是一种解决方法。有什么直接的方法吗?
  • 没有跨浏览器兼容的直接函数(不是IE11+)。
  • 如果您正在处理数字,您还可以使用numeraljs.com 来解析和重新格式化数字。
  • var x = 2,500.00 是语法错误。

标签: javascript regex


【解决方案1】:

String.prototype.replace可以带函数:

'2,123,500.00'.replace(/[,.]/g, function(c){ return c===',' ? '.' : ','; });

【讨论】:

  • @Karl-AndréGagnon 哦。在哪里?
  • 实际上,我错了(并且学到了一些新东西)。我虽然 . 会匹配每个字符...
  • @Karl-AndréGagnon 它确实匹配每个字符,但不是在字符类中时。字符类匹配字面意思的东西。见这里:regular-expressions.info/charclass.html#special
  • @Pluto 这并不完全正确,例如字符类中的 \s 仍然匹配空格。
  • @Thinker 它是匹配的字符,它被传递给替换函数。如果更清楚,您可以将其重命名为 match。
【解决方案2】:

你可以使用:

var x = '2,123,500.00'; 
var arr = x.split('.');
var y = arr[0].replace(/,/g, '.') + ',' + arr[1];
//=> 2.123.500,00

【讨论】:

  • 此解决方案适用于点后没有逗号的特定情况。否则,此解决方案不起作用。
  • 根据OP,输入中确实只有一个点。
【解决方案3】:

你很幸运,.replace() 接受一个函数作为第二个参数。该函数将匹配的字符串作为参数,返回值将是.replace() 的replace_by 值。

简而言之,您可以简单地检查匹配的字符串是什么并返回正确的值:

var str = "2,500.00";

var changed_str =  str.replace(/,|\./g, function(old){
    if (old === '.')
        return ',';
    else if (old === ',')
        return '.';
});


document.write(changed_str)

【讨论】:

    【解决方案4】:

    为什么不使用内置方法来正确格式化您的数字?

    Number.toLocaleString() 在这里可以正常工作。

    如果您确实有您所说的数字,则可以使用正确的语言环境轻松实现此目的。如果您有数字的字符串表示形式,则首先必须对其进行解析。

    【讨论】:

    • 唯一需要注意的是浏览器的兼容性。这是一个 IE11+ 唯一的解决方案。它甚至在 Safari 中都不起作用。
    【解决方案5】:

    这(现在)适用于任意数量的逗号或点,即使是尾随或前导点或逗号。

    HTML:

    <div id="result"></div>
    

    JS:

    var x = '.,2.123,50.0.00.';
    
    var between_dots = x.split('.');
    for (var i = 0; i < between_dots.length; i++) {
        between_dots[i] = between_dots[i].replace(/,/g, '.');
    }
    var y = between_dots.join(',');
    
    document.getElementById('result').innerHTML = y;
    

    Here's the JSFiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2015-06-10
      相关资源
      最近更新 更多