Heim > Web-Frontend > js-Tutorial > Der beste Weg, Telefonnummern in Ihrer App zu speichern

Der beste Weg, Telefonnummern in Ihrer App zu speichern

Susan Sarandon
Freigeben: 2024-12-29 17:49:13
Original
1027 Leute haben es durchsucht

Best way to store phone numbers in your app

Bei der Speicherung von Telefonnummern im Backend ist es entscheidend, Effizienz, Standardisierung, Validierung und Internationalisierung zu berücksichtigen. Die beste Möglichkeit zum Speichern von Telefonnummern hängt oft von den Anforderungen Ihrer Anwendung ab (z. B. internationale Unterstützung, Validierungsregeln, Formatanforderungen).

Option 1: Speicherung der kompletten Rufnummer mit Landesvorwahl

Bei diesem Ansatz wird die vollständige Telefonnummer, einschließlich der Landesvorwahl, im internationalen E.164-Format (dem international anerkannten Telefonnummernformat) gespeichert.

Warum E.164-Format?

  • Standardisierung: E.164 ist ein weltweit akzeptiertes Telefonnummernformat, das Einzigartigkeit gewährleistet. Es enthält den Ländercode und entfernt alle Formatierungszeichen (wie Leerzeichen, Bindestriche oder Klammern), so dass nur Ziffern übrig bleiben.
  • Konsistenz: Durch die Speicherung von Telefonnummern im E.164-Format vermeiden Sie Inkonsistenzen bei der Formatierung zwischen verschiedenen Benutzern und Systemen.

  • Validierung: Sie können Telefonnummern ganz einfach mithilfe von Bibliotheken wie libphonenumber (von Google verwendet) validieren, um zu überprüfen, ob die Telefonnummer wohlgeformt und für ein bestimmtes Land gültig ist.

Beispiel für ein E.164-Format:

  • USA: 18005555555
  • Großbritannien: 442079460958
  • Indien: 919167988354

So lagern Sie:

Datenbankschema: Speichern Sie die Telefonnummer als einzelnes Zeichenfolgenfeld im E.164-Format.
Feldtyp: String oder VARCHAR (abhängig von der Datenbank).
Beispiel: VARCHAR(15) (E.164 erlaubt maximal 15 Ziffern).

Vorteile:

  • Internationalisierung: Es unterstützt alle globalen Nummern, sodass Ihr System problemlos an jedes Land anpassbar ist.
  • Vereinfachte Logik: Da Telefonnummern in einem einheitlichen Format gespeichert werden, müssen Sie sich nicht mit Variationen im Format, bei der Validierung oder der Extraktion des Ländercodes herumschlagen.
  • Keine redundanten Daten: Sie speichern ein kanonisches Format, wodurch das Risiko von Redundanz oder inkonsistenten Daten verringert wird.

Nachteile:

  • Benutzererfahrung: Benutzer müssen die vollständige Telefonnummer mit der Landesvorwahl eingeben, was möglicherweise nicht für alle Anwendungsfälle ideal ist (z. B. Eingabe nur lokaler Nummern).
CREATE TABLE users (
  id INT PRIMARY KEY,
  phone_number VARCHAR(15) NOT NULL
);

Nach dem Login kopieren
Nach dem Login kopieren

Option 2: Telefonnummer mit separater Landesvorwahl hinterlegen

Bei diesem Ansatz teilen Sie die Telefonnummer in zwei Felder auf: eines für die Landesvorwahl und eines für die Ortsnummer. Dies ermöglicht mehr Flexibilität bei der lokalisierten Formatierung und ist möglicherweise vorzuziehen, wenn Ihre Anwendung je nach Region unterschiedliche Verhaltensweisen für Telefonnummern erfordert (z. B. Validierungsregeln, Formatanzeige).

CREATE TABLE users (
  id INT PRIMARY KEY,
  phone_number VARCHAR(15) NOT NULL
);

Nach dem Login kopieren
Nach dem Login kopieren

Vorteile:

  • Lokalisierte Eingabe.
  • Einfache Formatierung
  • Vereinfachtes Parsen.

Nachteile:

  • Komplexere Logik: Möglicherweise benötigen Sie zusätzliche Logik für die getrennte Verwaltung der Landesvorwahl und der Ortsnummer, insbesondere zur Validierung oder beim Rekonstruieren der Nummer für die Anzeige.
  • Potenzielle Redundanz: Wenn der Benutzer häufig Ländervorwahlen oder Telefonnummern ändert, können Redundanzprobleme auftreten, insbesondere wenn mit mehreren Einträgen in verschiedenen Systemen gearbeitet wird.

Beispiel für Best Practice (E.164):

Hier ist ein vollständiges Beispiel für den Umgang mit Telefonnummern im E.164-Format und libphonenumber zur Validierung in Node.js:

  1. libphonenumber installieren:
CREATE TABLE users (
  id INT PRIMARY KEY,
  country_code VARCHAR(5) NOT NULL,
  local_number VARCHAR(20) NOT NULL
);
Nach dem Login kopieren
  1. Beispielcode (Node.js/Express):
npm install google-libphonenumber
Nach dem Login kopieren

Rufen Sie die Landesvorwahl von einer Telefonnummer ab

Um die Landesvorwahl (z. B. US für Vereinigte Staaten) von einer Telefonnummer mithilfe dieser Bibliothek abzurufen, können Sie die Funktion getRegionCodeForNumber verwenden. Diese Funktion nimmt eine Telefonnummer (die mit parseAndKeepRawInput oder ähnlichem analysiert werden muss) und gibt den Ländercode im ISO 3166-1 Alpha-2-Format zurück (z. B. IN, US, GB usw.).

Arbeitsbeispiel -

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
Nach dem Login kopieren

Erläuterung:

  • parseAndKeepRawInput(phoneNumber):
    Diese Methode wird verwendet, um die Telefonnummer zu analysieren und die Roheingabe beizubehalten, was bedeutet, dass sie Eingaben in verschiedenen Formaten verarbeiten kann (z. B. mit Leerzeichen, Bindestrichen oder Klammern).

  • getRegionCodeForNumber(number):
    Diese Funktion gibt den Ländercode (ISO 3166-1 Alpha-2-Code, z. B. IN, US, GB usw.) zurück, der der analysierten Telefonnummer zugeordnet ist.
    Dazu wird die Nummer mit der internen Liste länderspezifischer Telefonnummernmuster abgeglichen.

Erwartete Ausgabe

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

Nach dem Login kopieren

Wichtige Überlegungen:

  • Die Telefonnummer muss korrekt geparst werden und die Landesvorwahl (gefolgt von Ziffern) enthalten. Wenn die Telefonnummer im lokalen Format (ohne Landesvorwahl) vorliegt, müssen Sie beim Parsen die Standardregion (Land) angeben.

  • Standardregion: Wenn die Telefonnummer keinen Ländercode enthält, können Sie mithilfe der Parse-Methode einen Standard-Ländercode angeben (z. B. phoneUtil.parse(phoneNumber, 'IN'). ) für Indien).

Abschluss:

  • Das E.164-Format ist im Allgemeinen die beste Option zum Speichern von Telefonnummern im Backend, da es allgemein anerkannt ist und die Validierung und Speicherung vereinfacht.
  • Das getrennte Speichern der Landesvorwahl und der Ortsnummer kann in lokalisierten Systemen nützlich sein, erhöht jedoch die Komplexität.
  • Verwenden Sie Tools wie libphonenumber, um die Validierung, Formatierung und Analyse von Telefonnummern effizient durchzuführen.

Das obige ist der detaillierte Inhalt vonDer beste Weg, Telefonnummern in Ihrer App zu speichern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage