我的数据库中有很多电话号码[例如:1-123-456-7890]。我要做的是,从电话号码中分离国家拨号代码[在这种情况下1为美国/加拿大]。
我试过的是 - 我制作了所有国家的json列表,在加载页面时,我将电话号码和国家/地区代码分开。它工作正常,直到我得到一些以“+”开头或者电话号码只有6或7位的号码(在这种情况下没有国家代码)。
我尝试过google的GeoName API,但它没有返回我期望的内容。我找不到任何用于从电话号码获取国家/地区代码的API。
答案 0 :(得分:3)
这是一个非常复杂的问题之一。我建议使用像libphonenumber-js这样的库。
我创建了一个小帮助函数,默认使用美国国家代码:
function getCountryCode( input ) {
// Set default country code to US if no real country code is specified
const defaultCountryCode = input.substr( 0, 1 ) !== '+' ? 'US' : null;
let formatted = new libphonenumber.asYouType( defaultCountryCode ).input( input );
let countryCode = '';
let withoutCountryCode = formatted;
if ( defaultCountryCode === 'US' ) {
countryCode = '+1';
formatted = '+1 ' + formatted;
}
else {
const parts = formatted.split( ' ' );
countryCode = parts.length > 1 ? parts.shift() : '';
withoutCountryCode = parts.join( ' ' );
}
return {
formatted,
withoutCountryCode,
countryCode,
}
}
console.log( getCountryCode( '1-123-456-7890' ) );
console.log( getCountryCode( '+12133734' ) );
console.log( getCountryCode( '+49300200100' ) );
console.log( getCountryCode( '621234567' ) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/0.4.27/libphonenumber-js.min.js"></script>