JavaScript/jQuery中基于格式字符串的格式编号

JavaScript/jQuery中基于格式字符串的格式编号,javascript,jquery,formatting,string-formatting,Javascript,Jquery,Formatting,String Formatting,假设我有一个 格式字符串“XXX-XXX-XXXX”(用于设置电话号码的格式),或X表示号码的任何其他格式字符串 我希望保留格式字符串中的格式(间距、破折号等),但将每个X交换为一个数字,并删除源字符串中的所有格式 示例: 输入:“abc+d(123)4567890”,格式字符串:“XXX-XXX-XXXX”,输出:“123-456-7890” 输入“ABCC1234567890”,格式字符串:“X:X!XXXXX,XXX”,输出:“1:2!34567890” 输入“1234567890”

假设我有一个

  • 格式字符串“XXX-XXX-XXXX”(用于设置电话号码的格式),或X表示号码的任何其他格式字符串
  • 我希望保留格式字符串中的格式(间距、破折号等),但将每个X交换为一个数字,并删除源字符串中的所有格式
示例:

  • 输入:“abc+d(123)4567890”,格式字符串:“XXX-XXX-XXXX”,输出:“123-456-7890”
  • 输入“ABCC1234567890”,格式字符串:“X:X!XXXXX,XXX”,输出:“1:2!34567890”
  • 输入“1234567890”,格式字符串:“(XXX)XXX-XXXX”,输出:“(123)456-7890”
我想我可以通过迭代源字符串(0123456789中的foreach字符)来获取数字,但我不确定如何将其优雅地组合成正确的格式。也许有一个jQuery函数已经做到了这一点

"abc+d(123)4567890"
.replace(/\D/g, "")
.replace(/(\d{3})(\d{3})(\d{4})/, "$1 - $2 - $3")

首先删除非数字(\D),然后对它们进行分组,最后在替换文本中使用分组。

这里有一种方法:

function formatPhoneNumber(input, format) {
    // Strip non-numeric characters
    var digits = input.replace(/\D/g, '');

    // Replace each "X" with the next digit
    var count = 0;
    return format.replace(/X/g, function() {
        return digits.charAt(count++);
    });
}

抱歉,我不清楚格式字符串可能不同(例如,可能更改为X-XXX-XX-XX),因此它需要能够处理一般格式。