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).
Bei diesem Ansatz wird die vollständige Telefonnummer, einschließlich der Landesvorwahl, im internationalen E.164-Format (dem international anerkannten Telefonnummernformat) gespeichert.
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.
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).
CREATE TABLE users ( id INT PRIMARY KEY, phone_number VARCHAR(15) NOT NULL );
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 );
Hier ist ein vollständiges Beispiel für den Umgang mit Telefonnummern im E.164-Format und libphonenumber zur Validierung in 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
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.).
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):
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.
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}`); });
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).
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!