如何分开国家代码表格电话号码?

时间:2017-08-21 12:07:32

标签: javascript

我的数据库中有很多电话号码[例如:1-123-456-7890]。我要做的是,从电话号码中分离国家拨号代码[在这种情况下1为美国/加拿大]。

我试过的是 - 我制作了所有国家的json列表,在加载页面时,我将电话号码和国家/地区代码分开。它工作正常,直到我得到一些以“+”开头或者电话号码只有6或7位的号码(在这种情况下没有国家代码)。

我尝试过google的GeoName API,但它没有返回我期望的内容。我找不到任何用于从电话号码获取国家/地区代码的API。

1 个答案:

答案 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>