バックエンドに電話番号を保存する場合は、効率、標準化、検証、国際化を考慮することが重要です。電話番号を保存する最適な方法は、多くの場合、アプリケーションのニーズ (国際サポート、検証ルール、形式要件など) によって異なります。
このアプローチでは、国コードを含む完全な電話番号を国際 E.164 形式 (国際的に認識されている電話番号形式) で保存します。
一貫性: 電話番号を E.164 形式で保存することで、さまざまなユーザーやシステム間での形式の不一致を回避できます。
検証: libphonenumber (Google が使用) などのライブラリを使用して電話番号を簡単に検証し、電話番号が適切な形式であり、特定の国に対して有効であることを検証できます。
データベース スキーマ: 電話番号を E.164 形式の単一の文字列フィールドとして保存します。
フィールドタイプ: String または VARCHAR (データベースに応じて)。
例: VARCHAR(15) (E.164 では最大 15 桁が許可されます)。
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
このアプローチでは、電話番号を 2 つのフィールドに分割します。1 つは国番号用、もう 1 つは市内番号用です。これにより、ローカライズされた書式設定の柔軟性が向上し、アプリケーションで地域ごとに異なる電話番号の動作 (検証ルール、書式表示など) が必要な場合に推奨される可能性があります。
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
Node.js で検証のために E.164 形式の電話番号と libphonenumber を処理する完全な例を次に示します。
CREATE TABLE users ( id INT PRIMARY KEY, country_code VARCHAR(5) NOT NULL, local_number VARCHAR(20) NOT NULL );
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') ) インドの場合)。
以上がアプリに電話番号を保存する最良の方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。