Lors du stockage des numéros de téléphone dans le backend, il est crucial de prendre en compte l'efficacité, la standardisation, la validation et l'internationalisation. La meilleure façon de stocker les numéros de téléphone dépend souvent des besoins de votre application (par exemple, support international, règles de validation, exigences de format).
Cette approche stocke le numéro de téléphone complet, y compris l'indicatif du pays, au format international E.164 (qui est le format de numéro de téléphone internationalement reconnu).
Cohérence : En stockant les numéros de téléphone au format E.164, vous évitez les incohérences de formatage entre différents utilisateurs et systèmes.
Validation : Vous pouvez facilement valider les numéros de téléphone à l'aide de bibliothèques telles que libphonenumber (utilisée par Google) pour vérifier que le numéro de téléphone est bien formé et valide pour un pays spécifique.
Schéma de base de données : stockez le numéro de téléphone sous forme de champ de chaîne unique au format E.164.
Type de champ : String ou VARCHAR (selon la base de données).
Exemple : VARCHAR(15) (E.164 autorise un maximum de 15 chiffres).
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
Dans cette approche, vous divisez le numéro de téléphone en deux champs : un pour l'indicatif du pays et un pour le numéro local. Cela permet plus de flexibilité pour le formatage localisé et peut être préférable si votre application nécessite des comportements de numéro de téléphone différents selon la région (par exemple, règles de validation, affichage du format).
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
Voici un exemple complet de gestion des numéros de téléphone au format E.164 et libphonenumber pour validation dans 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
Pour récupérer l'indicatif du pays (comme US pour les États-Unis) à partir d'un numéro de téléphone à l'aide de cette bibliothèque, vous pouvez utiliser la fonction getRegionCodeForNumber. Cette fonction prend un numéro de téléphone (qui doit être analysé à l'aide de parseAndKeepRawInput ou similaire) et renvoie le code du pays au format ISO 3166-1 alpha-2 (par exemple, IN, US, GB, etc.).
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):
Cette méthode est utilisée pour analyser le numéro de téléphone et conserver l'entrée brute, ce qui signifie qu'elle peut gérer les entrées dans différents formats (par exemple, avec des espaces, des tirets ou des parenthèses).
getRegionCodeForNumber(numéro):
Cette fonction renvoie le code du pays (code ISO 3166-1 alpha-2, tel que IN, US, GB, etc.) associé au numéro de téléphone analysé.
Pour ce faire, il compare le numéro à sa liste interne de modèles de numéros de téléphone spécifiques au pays.
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}`); });
Le numéro de téléphone doit être analysé correctement et doit inclure l'indicatif du pays (suivi de chiffres). Si le numéro de téléphone est au format local (sans l'indicatif du pays), vous devrez spécifier la région (pays) par défaut lors de l'analyse.
Région par défaut : si le numéro de téléphone ne contient pas d'indicatif de pays, vous pouvez fournir un indicatif de pays par défaut à l'aide de la méthode d'analyse (par exemple, phoneUtil.parse(phoneNumber, 'IN' ) pour l'Inde).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!