在後端儲存電話號碼時,考慮效率、標準化、驗證和國際化至關重要。儲存電話號碼的最佳方式通常取決於應用程式的需求(例如國際支援、驗證規則、格式要求)。
此方法以國際 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 );
在此方法中,您將電話號碼分為兩個欄位:一個用於國家/地區代碼,另一個用於本地號碼。這為本地化格式提供了更大的靈活性,如果您的應用程式需要按區域劃分不同的電話號碼行為(例如驗證規則、格式顯示),這可能會更好。
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
以下是處理 E.164 格式的電話號碼和 libphonenumber 以在 Node.js 中進行驗證的完整範例:
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(number):
此函數傳回與解析的電話號碼關聯的國家代碼(ISO 3166-1 alpha-2 代碼,例如 IN、US、GB 等)。
它透過將號碼與特定於國家/地區的電話號碼模式的內部清單進行匹配來實現此目的。
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中文網其他相關文章!