HOWTO · React

React 形式の電話番号

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

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