> 웹 프론트엔드 > JS 튜토리얼 > 앱에 전화번호를 저장하는 가장 좋은 방법

앱에 전화번호를 저장하는 가장 좋은 방법

Susan Sarandon
풀어 주다: 2024-12-29 17:49:13
원래의
1007명이 탐색했습니다.

Best way to store phone numbers in your app

백엔드에 전화번호를 저장할 때 효율성, 표준화, 검증 및 국제화를 고려하는 것이 중요합니다. 전화번호를 저장하는 가장 좋은 방법은 애플리케이션 요구 사항(예: 국제 지원, 유효성 검사 규칙, 형식 요구 사항)에 따라 달라지는 경우가 많습니다.

옵션 1: 국가 코드와 함께 전체 전화번호 저장

이 접근 방식은 국가 코드를 포함한 전체 전화번호를 국제 E.164 형식(국제적으로 인정되는 전화번호 형식)으로 저장합니다.

왜 E.164 형식인가요?

  • 표준화: E.164는 고유성을 보장하는 전 세계적으로 허용되는 전화 번호 형식입니다. 여기에는 국가 코드가 포함되어 있으며 서식 지정 문자(예: 공백, 하이픈, 괄호)가 제거되고 숫자만 남습니다.
  • 일관성: 전화번호를 E.164 형식으로 저장하면 다양한 사용자와 시스템에서 형식의 불일치를 방지할 수 있습니다.

  • 검증: 전화번호가 올바른 형식이고 특정 국가에서 유효한지 확인하기 위해 libphonenumber(Google에서 사용)와 같은 라이브러리를 사용하여 전화번호를 쉽게 검증할 수 있습니다.

E.164 형식 예:

  • 미국: 18005555555
  • 영국: 442079460958
  • 인도: 919167988354

저장 방법:

데이터베이스 스키마: 전화번호를 E.164 형식의 단일 문자열 필드로 저장합니다.
필드 유형: 문자열 또는 VARCHAR(데이터베이스에 따라 다름).
예: VARCHAR(15)(E.164에서는 최대 15자리까지 허용).

장점:

  • 국제화: 모든 글로벌 번호를 지원하므로 시스템을 모든 국가에 쉽게 적용할 수 있습니다.
  • 단순화된 논리: 전화번호는 일정한 형식으로 저장되므로 형식, 유효성 검사 또는 국가 코드 추출의 변형을 처리할 필요가 없습니다.
  • 중복 데이터 없음: 하나의 표준 형식을 저장하여 중복 또는 일관되지 않은 데이터의 위험을 줄입니다.

단점:

  • 사용자 경험: 사용자는 국가 코드와 함께 전체 전화번호를 입력해야 하며 이는 모든 사용 사례(예: 지역 번호만 입력)에 적합하지 않을 수 있습니다.
CREATE TABLE users (
  id INT PRIMARY KEY,
  phone_number VARCHAR(15) NOT NULL
);

로그인 후 복사
로그인 후 복사

옵션 2: 별도의 국가 코드와 함께 전화번호 저장

이 접근 방식에서는 전화번호를 두 개의 필드로 분할합니다. 하나는 국가 코드용이고 다른 하나는 지역 번호용입니다. 이를 통해 현지화된 형식 지정에 더 많은 유연성을 제공하며 애플리케이션에서 지역별로 다른 전화 번호 동작(예: 유효성 검사 규칙, 형식 표시)이 필요한 경우 바람직할 수 있습니다.

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

로그인 후 복사
로그인 후 복사

장점:

  • 현지화된 입력.
  • 간편한 서식
  • 단순한 구문 분석.

단점:

  • 더 복잡한 논리: 특히 확인을 위해 또는 표시할 번호를 재구성할 때 국가 코드와 지역 번호를 별도로 관리하기 위한 추가 논리가 필요할 수 있습니다.
  • 잠재적 중복성: 사용자가 국가 코드나 전화번호를 자주 변경하는 경우, 특히 서로 다른 시스템에서 여러 항목을 작업할 때 중복성 문제가 발생할 수 있습니다.

모범 사례의 예(E.164):

다음은 Node.js에서 유효성 검사를 위해 E.164 형식 및 libphonenumber로 전화번호를 처리하는 전체 예입니다.

  1. libphonenumber 설치:
CREATE TABLE users (
  id INT PRIMARY KEY,
  country_code VARCHAR(5) NOT NULL,
  local_number VARCHAR(20) NOT NULL
);
로그인 후 복사
  1. 예제 코드(Node.js/Express):
npm install google-libphonenumber
로그인 후 복사

전화번호에서 국가 코드 검색

이 라이브러리를 사용하여 전화번호에서 국가 코드(예: 미국의 경우 US)를 검색하려면 getRegionCodeForNumber 함수를 사용할 수 있습니다. 이 함수는 전화번호(parseAndKeepRawInput 등을 사용하여 구문 분석해야 함)를 가져와 ISO 3166-1 alpha-2 형식(예: IN, US, GB 등)으로 국가 코드를 반환합니다.

실제 사례 -

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(전화번호):
    이 방법은 전화번호를 구문 분석하고 원시 입력을 유지하는 데 사용됩니다. 즉, 다양한 형식(예: 공백, 대시 또는 괄호)의 입력을 처리할 수 있습니다.

  • getRegionCodeForNumber(번호):
    이 함수는 구문 분석된 전화번호와 연결된 국가 코드(IN, US, GB 등의 ISO 3166-1 alpha-2 코드)를 반환합니다.
    이는 국가별 전화번호 패턴의 내부 목록과 번호를 대조하여 수행됩니다.

예상 출력

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

로그인 후 복사

중요 고려사항:

  • 전화번호는 올바르게 구문 분석되어야 하며 국가 코드(뒤에 숫자)가 포함되어야 합니다. 전화번호가 지역 형식(국가 코드 없음)인 경우 구문 분석 중에 기본 지역(국가)을 지정해야 합니다.

  • 기본 지역: 전화번호에 국가 코드가 포함되어 있지 않으면 구문 분석 방법(예:phoneUtil.parse(phoneNumber, 'IN')을 사용하여 기본 국가 코드를 제공할 수 있습니다. ) 인도의 경우).

결론:

  • E.164 형식은 보편적으로 인식되고 검증 및 저장을 단순화하기 때문에 일반적으로 백엔드에 전화번호를 저장하는 데 가장 적합한 옵션입니다.
  • 국가 코드와 지역 번호를 별도로 저장하면 현지화된 시스템에 유용할 수 있지만 복잡성이 가중됩니다.
  • libphonenumber와 같은 도구를 사용하여 전화번호 확인, 형식 지정 및 구문 분석을 효율적으로 처리하세요.

위 내용은 앱에 전화번호를 저장하는 가장 좋은 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿