如何格式化字符串中的所有电话号码(javascript)

时间:2013-10-25 06:48:50

标签: javascript regex formatting libphonenumber

我需要格式化源字符串中的电话号码,保留源字符串中数字的位置

我有一个包含电话号码列表的任意字符串。它们被不规则地列出,散布着各种标记和标点符号,例如:

  • mobile:标记前面的手机号码
  • tel.:标记在手机之前。它可以是任何版本,例如。 G。 Tel:tel. :tel.TEL:。它可以在任何地方以任何数量出现。
  • ,.{space}{tab}作为分隔符。

通常,源字符串中的“电话号码”是符合regexp的字符串:

/[0-9 +()-]+/

因此,我可以使用上面的regexp在源字符串中的所有手机上成功匹配。但是,AFAIK我不能只str.replace(regexp, replacement),因为数字的处理将由libphonenumber完成。

我必须保留数字周围的所有噪音,因为它并不总是噪音。或者我只是将整个字符串重新格式化。

我想,这个问题可以推断如下:如何在正则表达式找到的所有子串上映射函数,但是没关系。

有没有办法做上面描述的内容?目标语言是Javascript(嗯,Adobe Illustrator脚本引擎可以解析的Javascript类型,绝对具体)。

实施例

语言是俄语。强制格式的手机是“国际的”(在libphonenumber文档中如何称呼)。


输入:Тел: (343) 378-33-00, моб.: +7(904) 54-73-818

所需的输出:Тел: 8 (343) 378-33-00, моб.: 8 (904) 547-38-18

这里只是重新格式化数字。代币Тел:, моб.:保持不变。


输入:8(495) 941 93 20 моб. 8 915-295-62-86

所需的输出:8 (495) 941-93-20 моб. 8 (915) 295-62-86

这里我们也重新格式化了数字。令牌моб保持不变,周围有空格。


输入:Тел: 8(495) 685-95-95 доб.:4093, моб.: +7(916) 885-11-58

所需的输出:Тел: 8 (495) 685-95-95 доб.:4093, моб.: 8 (916) 885-11-58

不要关心空间崩溃或正确放置标点符号,这将在处理的后期阶段完成。


1 个答案:

答案 0 :(得分:2)

String.replace可以将函数作为第二个参数,在这种情况下,为每个匹配调用函数,返回值是替换匹配的函数。

函数参数可以包括匹配或其他内容,基于它们的名称。您可以查看docs for replace了解更多详情。

无论如何,这似乎可以解决问题:

inputString = "Тел: (343) 378-33-00, моб.: +7(904) 54-73-818";

function replacer(match) {
    // you would call libphonenumber here and return the formatted number
    return "{" + match + "}";
};

outputString = inputString.replace(/[\-\+0-9 \(\)]+/g, replacer);

P.S。您拥有的正则表达式与电话号码匹配也存在一个小问题。例如,它只匹配“”,或只是“ - ”。避免这种情况的更好的正则表达式可能类似于:

/[\-\+\(]*[0-9][\-\+ \(\)0-9]*/g

这可能需要一些调整。