如何将NodeJS中的电话号码转换为标准格式?

时间:2016-11-28 10:33:37

标签: javascript node.js

我想将电话号码标准化为+<countrycode><areacode><number>格式。问题是输入可能是:

+972-54-5123456
+972545123456
972545123456
+972 (54) 5123456
00972545123456
0545123456 // especially problematic, as I have to assume it's an Israeli number

无论输入是什么,我都希望将所有格式标准化为972545123456+972545123456格式。所以它可能是:

normalizeNumber('0545123456',default_country="IL")

2 个答案:

答案 0 :(得分:2)

使用Google的libphonenumber。这是npm:

https://www.npmjs.com/package/google-libphonenumber

从该页面获取一个用法示例:

// Require `PhoneNumberFormat`. 
var PNF = require('google-libphonenumber').PhoneNumberFormat;

// Get an instance of `PhoneNumberUtil`. 
var phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance();

// Parse number with country code. 
var phoneNumber = phoneUtil.parse('202-456-1414', 'US');

// Print number in the international format. 
console.log(phoneUtil.format(phoneNumber, PNF.INTERNATIONAL));
// => +1 202-456-1414 

答案 1 :(得分:-1)

非常简单,只需编码即可:

function normalizeNumber(input, default_country) {
    return String(input)
        .replace(/[^+0-9]/g, '')  // remove non-number (and +) characters
        .replace(/^00/, '+')  // replace leading 00 with +
        .replace(/^0/, getCountryCode(default_country)) // replace leading 0 with default code
}

如果您愿意,可以将语句拆分并添加一些检查,例如最终结果是否以+和/或某个预期长度开始。

以下模块可用作getCountryCode的来源: