如何正确地为IBAN数组添加空格

时间:2017-12-29 10:10:24

标签: javascript regex iban

我想问一个关于正则表达式的问题。

我有一系列IBAN。

例如["DE46700202700663820656", "DE07860700240455474700"]

我想在每4个字符之间添加空格。

例如"DE46 7002 0270 0663 8206 56"

目前我使用此正则表达式。

String(this.props.invoiceData.iban).replace(/(.{4})/g, '$1 ').split(',')

它可以添加空格,但正则表达式不会重新启动第二个IBAN,第二个IBAN会被破坏。

例如["DE46 7002 0270 0663 8206 56", "D E078 6070 0240 4554 7470 0"]

我应该怎样做以显示两个具有适当空格的IBAN?

例如["DE46 7002 0270 0663 8206 56", "DE07 8607 0024 0455 4747 00"]

2 个答案:

答案 0 :(得分:2)

  

它可以添加空格,但正则表达式不会重新启动第二个IBAN,第二个IBAN会被破坏。

那是因为正则表达式保持状态。之一:

  1. 每次创建,或

  2. 使用前将lastIndex设为0

  3. 这里#1:

    
    
    var ibans = ["DE46700202700663820656", "DE07860700240455474700"];
    ibans = ibans.map(function(iban) {
      return iban.replace(/(.{4})/g, '$1 ');
    });
    console.log(ibans);
    
    
    

    除非您使用古老的 JavaScript引擎,但每次都没有重新创建文字正则表达式(我们说的是Firefox 3.0x或其左右),这应该是细

    这里#2:

    
    
    var rex = /(.{4})/g;
    var ibans = ["DE46700202700663820656", "DE07860700240455474700"];
    ibans = ibans.map(function(iban) {
      rex.lastIndex = 0;
      return iban.replace(rex, '$1 ');
    });
    console.log(ibans);
    
    
    

    显然,如果您可以使用ES2015 +箭头功能等,可以缩短两者......

答案 1 :(得分:1)

您可以使用.map()尝试这样做:

var a = ["DE46700202700663820656", "DE07860700240455474700"];
var b = a.map(i => i.replace(/(.{4})/g, '$1 '));
console.log(b)