Maison > interface Web > js tutoriel > Meilleure façon de stocker des numéros de téléphone dans votre application

Meilleure façon de stocker des numéros de téléphone dans votre application

Susan Sarandon
Libérer: 2024-12-29 17:49:13
original
1007 Les gens l'ont consulté

Best way to store phone numbers in your app

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).

Option 1 : stockage du numéro de téléphone complet avec l'indicatif du pays

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).

Pourquoi le format E.164 ?

  • Standardisation : E.164 est un format de numéro de téléphone accepté mondialement qui garantit l'unicité. Il inclut le code du pays et supprime tous les caractères de formatage (comme les espaces, les traits d'union ou les parenthèses), ne laissant que les chiffres.
  • 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.

Exemple de format E.164 :

  • États-Unis : 18005555555
  • Royaume-Uni : 442079460958
  • Inde : 919167988354

Comment stocker :

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).

Avantages :

  • Internationalisation : il prend en charge tous les numéros mondiaux, ce qui rend votre système facilement adaptable à n'importe quel pays.
  • Logique simplifiée : étant donné que les numéros de téléphone sont stockés dans un format uniforme, vous n'avez pas besoin de gérer les variations de format, la validation ou l'extraction de l'indicatif du pays.
  • Aucune donnée redondante : vous stockez un seul format canonique, réduisant ainsi le risque de redondance ou de données incohérentes.

Inconvénients :

  • Expérience utilisateur : les utilisateurs doivent saisir le numéro de téléphone complet avec l'indicatif du pays, ce qui peut ne pas être idéal pour tous les cas d'utilisation (par exemple, saisie d'un numéro local uniquement).
CREATE TABLE users (
  id INT PRIMARY KEY,
  phone_number VARCHAR(15) NOT NULL
);

Copier après la connexion
Copier après la connexion

Option 2 : Enregistrement du numéro de téléphone avec un indicatif de pays distinct

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
);

Copier après la connexion
Copier après la connexion

Avantages :

  • Entrée localisée.
  • Formatage facile
  • Analyse simplifiée.

Inconvénients :

  • Logique plus complexe : Vous aurez peut-être besoin d'une logique supplémentaire pour gérer séparément l'indicatif du pays et le numéro local, notamment pour la validation ou lors de la reconstruction du numéro pour l'affichage.
  • Redondance potentielle : si l'utilisateur change fréquemment d'indicatif de pays ou de numéro de téléphone, vous pouvez rencontrer des problèmes de redondance, en particulier lorsque vous travaillez avec plusieurs entrées sur différents systèmes.

Exemple de meilleure pratique (E.164) :

Voici un exemple complet de gestion des numéros de téléphone au format E.164 et libphonenumber pour validation dans Node.js :

  1. Installer libphonenumber :
CREATE TABLE users (
  id INT PRIMARY KEY,
  country_code VARCHAR(5) NOT NULL,
  local_number VARCHAR(20) NOT NULL
);
Copier après la connexion
  1. Exemple de code (Node.js/Express) :
npm install google-libphonenumber
Copier après la connexion

Récupérer l'indicatif du pays à partir d'un numéro de téléphone

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.).

Exemple de travail -

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
Copier après la connexion

Explication:

  • 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.

Résultat attendu

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}`);
});

Copier après la connexion

Considérations importantes :

  • 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).

Conclusion:

  • Le format E.164 est généralement la meilleure option pour stocker les numéros de téléphone dans le backend car il est universellement reconnu et simplifie la validation et le stockage.
  • Le stockage séparé de l'indicatif du pays et du numéro local peut être utile dans les systèmes localisés, mais ajoute de la complexité.
  • Utilisez des outils tels que libphonenumber pour gérer efficacement la validation, le formatage et l'analyse des numéros de téléphone.

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal