ホームページ > ウェブフロントエンド > jsチュートリアル > アプリに電話番号を保存する最良の方法

アプリに電話番号を保存する最良の方法

Susan Sarandon
リリース: 2024-12-29 17:49:13
オリジナル
1001 人が閲覧しました

Best way to store phone numbers in your app

バックエンドに電話番号を保存する場合は、効率、標準化、検証、国際化を考慮することが重要です。電話番号を保存する最適な方法は、多くの場合、アプリケーションのニーズ (国際サポート、検証ルール、形式要件など) によって異なります。

オプション 1: 国コードを含む完全な電話番号を保存する

このアプローチでは、国コードを含む完全な電話番号を国際 E.164 形式 (国際的に認識されている電話番号形式) で保存します。

E.164 形式を使用する理由

  • 標準化: E.164 は、一意性を保証する世界的に受け入れられた電話番号形式です。これには国コードが含まれており、書式設定文字 (スペース、ハイフン、括弧など) がすべて削除され、数字のみが残ります。
  • 一貫性: 電話番号を E.164 形式で保存することで、さまざまなユーザーやシステム間での形式の不一致を回避できます。

  • 検証: libphonenumber (Google が使用) などのライブラリを使用して電話番号を簡単に検証し、電話番号が適切な形式であり、特定の国に対して有効であることを検証できます。

E.164 フォーマットの例:

  • 米国: 18005555555
  • 英国: 442079460958
  • インド: 919167988354

保管方法:

データベース スキーマ: 電話番号を E.164 形式の単一の文字列フィールドとして保存します。
フィールドタイプ: String または VARCHAR (データベースに応じて)。
例: VARCHAR(15) (E.164 では最大 15 桁が許可されます)。

利点:

  • 国際化: すべてのグローバル番号をサポートし、システムをどの国にも簡単に適応できます。
  • 単純化されたロジック: 電話番号は統一された形式で保存されるため、形式、検証、または国コードの抽出の違いに対処する必要はありません。
  • 冗長データなし: 1 つの正規形式を保存することで、データの冗長性や不整合のリスクが軽減されます。

短所:

  • ユーザーエクスペリエンス: ユーザーは国番号を含む完全な電話番号を入力する必要がありますが、これはすべてのユースケースにとって理想的ではない可能性があります (市内番号のみの入力など)。
CREATE TABLE users (
  id INT PRIMARY KEY,
  phone_number VARCHAR(15) NOT NULL
);

ログイン後にコピー
ログイン後にコピー

オプション 2: 別の国コードを使用して電話番号を保存する

このアプローチでは、電話番号を 2 つのフィールドに分割します。1 つは国番号用、もう 1 つは市内番号用です。これにより、ローカライズされた書式設定の柔軟性が向上し、アプリケーションで地域ごとに異なる電話番号の動作 (検証ルール、書式表示など) が必要な場合に推奨される可能性があります。

CREATE TABLE users (
  id INT PRIMARY KEY,
  phone_number VARCHAR(15) NOT NULL
);

ログイン後にコピー
ログイン後にコピー

利点:

  • ローカライズされた入力。
  • 簡単なフォーマット
  • 簡略化された解析。

短所:

  • より複雑なロジック: 特に検証や表示用に番号を再構築する場合、国コードと市内番号を個別に管理するための追加のロジックが必要になる場合があります。
  • 潜在的な冗長性: ユーザーが国コードや電話番号を頻繁に変更する場合、特に異なるシステム間で複数のエントリを操作する場合に、冗長性に関する問題が発生する可能性があります。

ベスト プラクティスの例 (E.164):

Node.js で検証のために E.164 形式の電話番号と libphonenumber を処理する完全な例を次に示します。

  1. libphonenumber をインストールします:
CREATE TABLE users (
  id INT PRIMARY KEY,
  country_code VARCHAR(5) NOT NULL,
  local_number VARCHAR(20) NOT NULL
);
ログイン後にコピー
  1. コード例 (Node.js/Express):
npm install google-libphonenumber
ログイン後にコピー

電話番号から国コードを取得する

このライブラリを使用して電話番号から国コード (米国の US など) を取得するには、getRegionCodeForNumber 関数を使用できます。この関数は電話番号 (parseAndKeepRawInput などを使用して解析する必要がある) を受け取り、ISO 3166-1 alpha-2 形式 (例: IN、US、GB など) で国コードを返します。

動作例 -

const { PhoneNumberUtil, PhoneNumberFormat } = require('google-libphonenumber');
const phoneUtil = PhoneNumberUtil.getInstance();

const validatePhoneNumber = (phoneNumber, countryCode) => {
  try {
    const number = phoneUtil.parseAndKeepRawInput(phoneNumber, countryCode);
    const isValid = phoneUtil.isValidNumber(number);
    const formattedNumber = phoneUtil.format(number, PhoneNumberFormat.E164);

    return {
      isValid,
      formattedNumber
    };
  } catch (error) {
    return { isValid: false, error: 'Invalid phone number' };
  }
};

// Example usage
const { isValid, formattedNumber } = validatePhoneNumber('800-555-5555', 'US');
console.log(isValid, formattedNumber);  // true, +18005555555
ログイン後にコピー

説明:

  • parseAndKeepRawInput(phoneNumber):
    このメソッドは、電話番号を解析し、生の入力を保持するために使用されます。つまり、さまざまな形式 (スペース、ダッシュ、括弧など) の入力を処理できます。

  • getRegionCodeForNumber(数値):
    この関数は、解析された電話番号に関連付けられた国コード (IN、US、GB などの ISO 3166-1 alpha-2 コード) を返します。
    これは、国固有の電話番号パターンの内部リストと番号を照合することで行われます。

期待される出力

const { PhoneNumberUtil } = require('google-libphonenumber');
const phoneUtil = PhoneNumberUtil.getInstance();

// Function to get country code (ISO 3166-1 alpha-2)
const getCountryCodeFromPhoneNumber = (phoneNumber) => {
  try {
    // Parse the phone number and get the region (country code)
    const number = phoneUtil.parseAndKeepRawInput(phoneNumber);
    const countryCode = phoneUtil.getRegionCodeForNumber(number);
    return countryCode;
  } catch (error) {
    console.error("Error parsing phone number:", error);
    return null;
  }
};

// Test with different phone numbers
const testPhoneNumbers = [
  "+919167988354", // India
  "+14155552671",  // USA
  "+447777123456", // UK
  "+81 90 1234 5678", // Japan
];

testPhoneNumbers.forEach((phoneNumber) => {
  const countryCode = getCountryCodeFromPhoneNumber(phoneNumber);
  console.log(`Phone number: ${phoneNumber}, Country Code: ${countryCode}`);
});

ログイン後にコピー

重要な考慮事項:

  • 電話番号は正しく解析される必要があり、国コード (その後に数字が続く) が含まれている必要があります。電話番号がローカル形式 (国コードなし) の場合、解析中にデフォルトの地域 (国) を指定する必要があります。

  • デフォルトの地域: 電話番号に国コードが含まれていない場合は、parse メソッドを使用してデフォルトの国コードを指定できます (例:phoneUtil.parse(phoneNumber, 'IN') ) インドの場合)。

結論:

  • E.164 形式は広く認識されており、検証と保存が簡素化されるため、バックエンドで電話番号を保存するには一般に最適なオプションです。
  • 国コードと市内番号を別々に保存すると、ローカライズされたシステムでは便利ですが、複雑さが増します。
  • libphonenumber などのツールを使用して、電話番号の検証、書式設定、解析を効率的に処理します。

以上がアプリに電話番号を保存する最良の方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート