Apabila menyimpan nombor telefon di bahagian belakang, adalah penting untuk mempertimbangkan kecekapan, penyeragaman, pengesahan dan pengantarabangsaan. Cara terbaik untuk menyimpan nombor telefon selalunya bergantung pada keperluan aplikasi anda (cth., sokongan antarabangsa, peraturan pengesahan, keperluan format).
Pendekatan ini menyimpan nombor telefon penuh, termasuk kod negara, dalam format E.164 antarabangsa (iaitu format nombor telefon yang diiktiraf di peringkat antarabangsa).
Ketekalan: Dengan menyimpan nombor telefon dalam format E.164, anda mengelakkan ketidakkonsistenan dalam pemformatan merentas pengguna dan sistem yang berbeza.
Pengesahan: Anda boleh mengesahkan nombor telefon dengan mudah menggunakan perpustakaan seperti libphonenumber (digunakan oleh Google) untuk mengesahkan bahawa nombor telefon itu dibentuk dengan baik dan sah untuk negara tertentu.
Skema Pangkalan Data: Simpan nombor telefon sebagai medan rentetan tunggal dalam format E.164.
Jenis medan: Rentetan atau VARCHAR (bergantung pada pangkalan data).
Contoh: VARCHAR(15) (E.164 membenarkan maksimum 15 digit).
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
Dalam pendekatan ini, anda membahagikan nombor telefon kepada dua medan: satu untuk kod negara dan satu untuk nombor tempatan. Ini membolehkan lebih fleksibiliti untuk pemformatan setempat dan mungkin lebih baik jika aplikasi anda memerlukan gelagat nombor telefon yang berbeza mengikut wilayah (cth., peraturan pengesahan, paparan format).
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
Berikut ialah contoh penuh pengendalian nombor telefon dengan format E.164 dan libphonenumber untuk pengesahan dalam 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
Untuk mendapatkan semula kod negara (seperti AS untuk Amerika Syarikat) daripada nombor telefon menggunakan pustaka ini, anda boleh menggunakan fungsi getRegionCodeForNumber. Fungsi ini mengambil nombor telefon (yang mesti dihuraikan menggunakan parseAndKeepRawInput atau serupa) dan mengembalikan kod negara dalam format ISO 3166-1 alpha-2 (cth., IN, US, GB, dll.).
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(nombor telefon):
Kaedah ini digunakan untuk menghuraikan nombor telefon dan menyimpan input mentah, bermakna ia boleh mengendalikan input dalam pelbagai format (cth., dengan ruang, sempang atau kurungan).
getRegionCodeForNumber(nombor):
Fungsi ini mengembalikan kod negara (kod ISO 3166-1 alpha-2, seperti IN, AS, GB, dll.) yang dikaitkan dengan nombor telefon yang dihuraikan.
Ia melakukan ini dengan memadankan nombor dengan senarai dalaman corak nombor telefon khusus negara.
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}`); });
Nombor telefon mesti dihuraikan dengan betul, dan ia harus mengandungi kod negara ( diikuti dengan digit). Jika nombor telefon dalam format tempatan (tanpa kod negara), anda perlu menentukan wilayah lalai (negara) semasa menghuraikan.
Wilayah lalai: Jika nombor telefon tidak mengandungi kod negara, anda boleh memberikan kod negara lalai menggunakan kaedah parse (cth., phoneUtil.parse(phoneNumber, 'IN' ) untuk India).
Atas ialah kandungan terperinci Cara terbaik untuk menyimpan nombor telefon dalam apl anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!