代码之家  ›  专栏  ›  技术社区  ›  neda Derakhshesh

借助javascript从字符串中获取数字

  •  1
  • neda Derakhshesh  · 技术社区  · 7 年前

    我在一个项目中工作,它需要从字符串中获取电话号码。在名为dine的Java脚本数组中,字符串如下所示

    {
    "group": 1, 
    
    "tel1": "Tél(1): 05.82.77.31.78", 
    "tel2": "Tél(2): 09.55.86.31.45", 
    
    }, 
    ,...
    

    <a href="tel:0970500469">Tél: 09.70.50.04.69</a>
    

    我使用了这个java脚本代码

    for (var i = 0; i < dine.length; i++) {
      telnom = dine[i].tel1;
      telnom = telnom.replace(/\D/g, '');
    
      alert(telnom);
    
      telnom2 = dine[i].tel2;
      telnom2 = telnom2.replace(/\D/g, '');
      alert(telnom2);
    
      infoHtml += '<div class="info">\n <p> <a href="tel:' + telnom + '">' + dine[i].tel1 + '</a></p>\n    <p> <a href="tel:' + telnom2 + '">' + dine[i].tel2 + '</a></p>\n  \n</div>';
    }
    

    问题是,它在我的电话号码的开头加了1,似乎它属于 Tél(1) 并使telnom1如下所示: 10970500469 0970500469

    我确信问题在于我使用替换代码的方式,但我真的不知道如何纠正它。

     telnom = dine[i].tel1;
    
     telnom = telnom.replace(/\D/g, '');
    
     telnom2 = dine[i].tel2;
    
     telnom2 = telnom2.replace(/\D/g, '');
    

    3 回复  |  直到 7 年前
        1
  •  2
  •   Ahmad    7 年前

    您需要删除括号内的所有数字以及非数字。你的regext应该是 /(\(\d*\)|\D)/g

    var telnom = "Tel:(1) - 05.34.36.15"
    
    telnom = telnom.replace(/(\(\d*\)|\D)/g, '');
    
    console.log(telnom);   //05343615
        2
  •  1
  •   Szab    7 年前

    如果你的电话号码总是以 Tel: , Tel(1): 例如,您可以考虑首先简单地拆分整个字符串。 :

    telnom = dine[i].tel1;
    telnom = telnom.split(":")[1].replace(/\D/g, '');
    
        3
  •  1
  •   im_tsm    7 年前

    您可以使用以下正则表达式获取所需的电话号码:

    var n = "Tél(1): 05.82.77.31.78".match(/[\d]\d+/g).join("");
    console.log(n);

    说明: [\d] 只匹配数字,我们正在添加另一个\d,因此只有两个并排匹配的数字。接下来,我们将它们连接到一个字符串。如果需要数字而不是字符串,可以执行以下操作: Number(n)