【JavaScript】入力された電話番号に自動でハイフンを追加するTips

スポンサーリンク

※本サイトにはプロモーションが含まれています

JavaScript

電話番号のハイフン入力が必須のフォームで
ハイフンの入れ忘れが多くて困ってる、との相談が。
人間は忘れる生き物なので、そらそうだ。
それならハイフンを自動で追加することはできないものか?

と思い、作成しました。
紹介するコードをコピペで使えますので、参考にしてみてください!

ライブラリ『libphonenumber』

まず今回、Googleが提供しているlibphonenumberというライブラリを使います。
libphonenumberのGitHubページでは、こんな風に紹介されています。

Google’s libphonenumber is a library that parses, formats, stores and validates international phone numbers. It is used by Android since version 4.0 and is a phenomenal repository of carrier metadata.

https://github.com/ruimarinho/google-libphonenumber

これを(英語できないので)Google翻訳で訳してみると
「Googleのlibphonenumberは、国際電話番号を解析、フォーマット、保存、検証するライブラリです。バージョン4.0以降Androidで使用されており、キャリアメタデータの驚異的なリポジトリです。」
とのこと。

電話番号って、国によって規格が違ったり
日本国内だけでも局番の桁数が違ったり、と様々な決め事が存在するので
それを個人でイチから全て網羅するのは大変です。
libphonenumberはその辺の問題をクリアにしてくれる素晴らしいライブラリなので、今回はこちらを使用します。

サンプル

サンプルとして、下のようなフォームを用意しました。

サンプルなのでフォームの送信はできませんが、
このフォームの電話番号がハイフン必須、という想定です。

サンプルページを作ったので試してみてください。
電話番号をハイフンなしで入力しても、
他の入力欄に移動すると勝手にハイフンがつく仕様になっています。

サンプルページ

解説

HTML

HTMLの方は、なんてことない普通のフォームです。

JavaScript

そして、先に紹介したlibphonenumberを読み込みます。


libphonenumberを読み込んだ後に、下記の記述を加えてください。

ハイフンがない場合だけでなく
ハイフンの位置がおかしなときも修正してくれますし、
全角数字で入力されたものを半角にも直してくれます。優秀!

まとめ

ということで、電話番号に自動でハイフンを追加するTipsをご紹介しました。

実装するにあたり下記のページを参考にさせていただきました。
ありがとうございます。

コメント

  1. Kanagu より:

    参考にさせていただきました。電話とファックスのフォームが併記されているものを作りたかったので当初、二段にスクリプトを書いてみました。もちろん動作は問題なかったのですが、もうちょっとスマートにと思い GEMINI に相談してみた所、下記のようなスクリプトを吐き出してくれました。無事動いてます。

    window.addEventListener(‘load’, () => {
    const validateAndFormat = (inputId) => {
    const inputTel = document.getElementById(inputId);
    if (!inputTel) return false;

    inputTel.addEventListener(‘blur’, () => {
    const postdata = inputTel.value;
    const validateTelNeo = (value) => /^[00]/.test(value) && libphonenumber.isValidNumber(value, ‘JP’);
    const formatTel = (value) => new libphonenumber.AsYouType(‘JP’).input(value);

    if (!validateTelNeo(postdata)) {
    console.log(‘ERROR’);
    return;
    }

    const formattedTel = formatTel(postdata);
    console.log(formattedTel);
    inputTel.value = formattedTel;
    });
    };

    validateAndFormat(‘tel’);
    validateAndFormat(‘fax’);
    });

    ありがとうございました。

    • nico より:

      参考になって何よりです。
      記載いただいたコードも、大変参考になります。ありがとうございます!

タイトルとURLをコピーしました