【问题标题】:How to add whitespace for array of IBAN properly如何为 IBAN 数组正确添加空格
【发布时间】:2018-06-09 19:01:46
【问题描述】:

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

我有一个 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"]

【问题讨论】:

    标签: javascript regex iban


    【解决方案1】:

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

    那是因为正则表达式保持状态。要么:

    1. 每次都创建,或者

    2. 使用前将lastIndex设置为0

    这里是#1:

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

    除非您使用的 ancient JavaScript 引擎每次都无法重新创建文字正则表达式(我们说的是 Firefox 3.0x 或更高版本),否则应该没问题。 p>

    这里是#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+ 箭头函数等,两者都可以缩短...

    【讨论】:

    • 感谢您的详细解答。我不知道 lastIndex。
    • @aaayumi:不用担心。 :-) 作为旁注,您不需要那个捕获组,您可以使用$& 来引用匹配本身:.replace(/.{4}/g, '$& ')
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多