我想将电话号码标准化为+<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")
答案 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
的来源: