React 形式の電話番号

Shubham Vora 2024年2月15日
  1. 電話番号をフォーマットするカスタム ロジックを作成する
  2. react-phone-number-input ライブラリを使用して、国に応じて電話番号をフォーマットする
React 形式の電話番号

この記事では、React で電話番号をフォーマットする方法を学びます。 開発者は、React アプリケーションの開発中に入力値のフォーマットの問題に直面することがよくあります。

ここでは、(###) ### - #### 形式で 10 桁の電話番号をフォーマットします。 目標を達成するために、最初の例ではカスタム ロジックを作成し、2 番目の例では React 組み込みライブラリを使用しました。

電話番号をフォーマットするカスタム ロジックを作成する

要件に応じて電話番号をフォーマットするカスタム ロジックを作成できます。 ユーザーは、次の手順に従って電話番号をフォーマットできます。

  • 入力が空の場合、空の文字列または値を返します。
    if (!input) return input;
    
  • 入力から数字をフィルタリングし、他の文字を削除します。
    const numberInput = input.replace(/[^\d]/g, "");
    
  • 電話番号の入力値の長さを取得します。
    const numberInputLength = numberInput.length;
    
  • 入力長が 4 未満の場合は、電話番号をそのまま返します。
    if (numberInputLength < 4) {
    	return numberInput;
    }
    
  • 入力値の長さが 4 ~ 7 の場合は、(###) #__ のようにフォーマットします。
     if (numberInputLength < 7) {
    	return `(${numberInput.slice(0, 3)}) ${numberInput.slice(3)}`;
    }
    
  • 入力値の長さが 10 を超える場合は、(###) ### - #___ のようにフォーマットします。
    if{
    	return `(${numberInput.slice(0, 3)}) ${numberInput.slice(3,6)}-${numberInput.slice(6, 10)}`;
    }
    

以下のコード例では、電話番号入力を取得するために <input> を作成しました。 入力の値が変化するたびに、handlephoneNumber() 関数が呼び出されます。

handlephoneNumber() 関数は formatPhoneNumber() 関数を呼び出して、上記の手順に従って電話番号をフォーマットします。 電話番号をフォーマットした後、handlephoneNumber() 関数は電話番号のフォーマットされた値を入力に設定します。

コード例:

// import react and usestate
import React, { useState } from "react";

function formatPhoneNumber(input) {
  //  if the input is null, return a null value
  if (!input) return input;
  // remove all characters from the input except number input.
  const numberInput = input.replace(/[^\d]/g, "");
  //  take the length of the value of the input
  const numberInputLength = numberInput.length;
  // if the number length is 1, 2, or 3, then return it as it is.
  if (numberInputLength < 4) {
    return numberInput;
  } else if (numberInputLength < 7) {
    // if the number input length is 4, 5, or 6, format it accordingly.
    return `(${numberInput.slice(0, 3)}) ${numberInput.slice(3)}`;
  } else {
    //  if the number input length is 7, 8, 9, 10, or more, format it like the below.
    return `(${numberInput.slice(0, 3)}) ${numberInput.slice(
      3,
      6
    )}-${numberInput.slice(6, 10)}`;
  }
  // return empty string in case any condition doesn't satisfy.
  return "";
}

export default function App() {
  // Binded phoneNumber with an input value and setPhoneNUmber is used to make changes to the value of phoneNumber
  const [phoneNumber, setphoneNumber] = useState("");
  //  whenever input will change, handlephoneNumber() function will invoke.
  const handlephoneNumber = (e) => {
    // format phone number
    const formattedPhoneNumber = formatPhoneNumber(e.target.value);
    //  set the formatted phone number to the input value
    setphoneNumber(formattedPhoneNumber);
  };

  return (
    <div style={{ textAlign: "center", marginTop: "30px" }}>
      {/* number input to take phone numbetr */}
      <input onChange={(e) => handlephoneNumber(e)} value={phoneNumber} />
    </div>
  );
}

出力:

電話番号のフォーマット - one

上記の出力では、ユーザーは入力値の長さに応じてフォーマットされた電話番号を確認できます。 また、ユーザーが数字以外の文字を入力に追加することを許可していません。

さらに、ユーザーは 10 を超える長さの数字を入力できません。

react-phone-number-input ライブラリを使用して、国に応じて電話番号をフォーマットする

React の react-phone-number-input ライブラリを使用すると、さまざまな国に応じて電話番号をフォーマットできます。 ライブラリをコードにインポートし、<phoneInput> コンポーネントを使用して電話番号入力を取得すると、電話番号が自動的にフォーマットされます。

例を見る前に、ユーザーはライブラリを React アプリにインストールする必要があります。 そのためには、React アプリと同じディレクトリでターミナルを開き、次のコマンドを入力します。

npm install react-phone-number-input

ここで、ユーザーは以下のようにアプリで <phoneInput> コンポーネントを使用する必要があります。 ここで、phoneNumber 変数は入力値を追跡し、ユーザーが入力値を変更すると、setPhoneNumber() 関数が値を phoneNumber に設定します。

<PhoneInput value={phoneNumber}  onChange={setphoneNumber}/>

1 行のコードで電話番号のフォーマットを実装しました。 ユーザーは、以下の完全な作業コードを見ることができます。

コード例:

//  import required libraries
import 'react-phone-number-input/style.css'
import PhoneInput from 'react-phone-number-input';
import { useState } from 'react';

function App() {
  const [phoneNumber, setphoneNumber] = useState()
  // using phoneInput component of react-phone-number-input library
  return (
    <PhoneInput
      placeholder="Add Your Phone Number Here"
      value={phoneNumber}
      onChange={setphoneNumber}/>
  )
}

export default App;

出力:

電話番号のフォーマット - 2

上記の出力では、ドロップダウンから選択した国に従って電話番号がフォーマットされていることがわかります。 また、電話番号の長さに応じて国を自動選択します。

2 番目の方法はコードの記述が簡単ですが、ユーザーが数字を入力するのを妨げません。 ユーザーは任意の長さの電話番号を入力できますが、これはアプリケーションの開発中はお勧めできません。

最初の方法で記述したように、カスタム ロジックを記述して、要件に従って電話番号をカスタマイズできます。 そのため、プログラマはカスタム ロジックを使用することをお勧めします。

著者: Shubham Vora
Shubham Vora avatar Shubham Vora avatar

Shubham is a software developer interested in learning and writing about various technologies. He loves to help people by sharing vast knowledge about modern technologies via different platforms such as the DelftStack.com website.

LinkedIn GitHub