jQueryで電話番号をフォーマットする方法


93

現在、のような電話番号を表示しています2124771000。ただし、数値をより人間が読める形式にフォーマットする必要があります212-477-1000。例:これが私の現在HTMLです:

<p class="phone">2124771000</p>

1
遅すぎる回答ですが、このページのURLにアクセスした人を助けるためだけです:igorescobar.github.io/jQuery-Mask-Plugin
Senthil

5
私はこれのクローズ状態を理解しているのかわかりません。建設的ではないように思われます...この情報は非常に有用であり、私をここに連れてきた問題に直接関連しています。私はそれが閉鎖されているという事実に異議を唱えませんが、表示された閉鎖の理由
Brett Weber

おそらく、質問は編集されていて、以前は説明が少なかったでしょう...それは私にとっては完全に有効なSOの質問と回答、そして多くの賛成票のようです。
Kevin Nelson

1
Googleライブラリgithub.com/googlei18n/libphonenumber jQueryは不要です。
nu everest

回答:


217

シンプル:http : //jsfiddle.net/Xxk3F/3/

$('.phone').text(function(i, text) {
    return text.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
});

または:http : //jsfiddle.net/Xxk3F/1/

$('.phone').text(function(i, text) {
    return text.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, '$1-$2-$3');
});

注:.text()メソッドは、入力要素では使用できません。入力フィールドのテキストには、.val()メソッドを使用します。


4
これを変更して、入力フィールド内の「変更」イベントをサポートしました。jsfiddle.net/gUsUK
Zach Shallbetter 2013年

3
/(\d{3})?(\d{3})(\d{4})$/市外局番がない場合は、正規表現のもう少し堅牢なものになります(カスタムの置換関数が必要です)
RevanProdigalKnight

世界中の電話番号に有効ですか?
RamPrasadBismil 2016

ページに複数の電話番号がある場合は、$(selector).each()関数を使用して、このマスクをすべての番号に簡単に適用することを検討してください。
Daniel Siebert 2016

keypressとblurイベントで実装したいと思います。桁数が10未満のサンプルコードのとき、それは電話番号をフォーマットいないことである: $('#x_phone').on('keypress blur',function() { var ph = $(this).val(); var temp = ph.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); $(this).val(temp); //alert(temp); });
Musaddiqカーン

54
var phone = '2124771000',
    formatted = phone.substr(0, 3) + '-' + phone.substr(3, 3) + '-' + phone.substr(6,4)

7
@AndreasAL:正規表現エンジンのオーバーヘッドが大きいため、特に入力形式が既知であり、単純な文字列操作の方がFARの効率が高い場合は特にそうです。そしてもちろん、問題に正規表現を使用すると、2つの問題が発生するというルールがあります。
マークB

4
このソリューションは、「212555IDEA」のように、文字を含む電話番号を適切にフォーマットします。
Jason Whitehorn 2013年

1
これはWindows環境ではうまく機能していますが、iOSデバイスでは機能しません。両方のプラットフォームで機能する代替手段はありますか
プルショタムシャルマ2017

12

純粋な整数で作業していることを確認することを忘れないでください。

var separator = '-';
$( ".phone" ).text( function( i, DATA ) {
    DATA
        .replace( /[^\d]/g, '' )
        .replace( /(\d{3})(\d{3})(\d{4})/, '$1' + separator + '$2' + separator + '$3' );
    return DATA;
});

8

これらの答えのいくつかの組み合わせは次のとおりです。これは入力フィールドに使用できます。7桁と10桁の電話番号を扱います。

// Used to format phone number
function phoneFormatter() {
  $('.phone').on('input', function() {
    var number = $(this).val().replace(/[^\d]/g, '')
    if (number.length == 7) {
      number = number.replace(/(\d{3})(\d{4})/, "$1-$2");
    } else if (number.length == 10) {
      number = number.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
    }
    $(this).val(number)
  });
}

実例:JSFiddle

これで直接質問に答えられるわけではないことはわかっていますが、答えを調べているときに、これは最初に見つけたページの1つでした。したがって、この答えは、私が探していたものと同様のものを探している人のためのものです。


5

ライブラリを使用して電話番号を処理します。GoogleのLibphonenumberが最善の策です。

// Require `PhoneNumberFormat`.
var PNF = require('google-libphonenumber').PhoneNumberFormat;

// Get an instance of `PhoneNumberUtil`.
var phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance();

// Parse number with country code.
var phoneNumber = phoneUtil.parse('202-456-1414', 'US');

// Print number in the international format.
console.log(phoneUtil.format(phoneNumber, PNF.INTERNATIONAL));
// => +1 202-456-1414

seegnoでこのパッケージを使用することをお勧めします。


4

米国の電話番号を(XXX)XXX-XXXとしてフォーマットするためのjsfiddleリンクを提供しました

 $('.class-name').on('keypress', function(e) {
  var key = e.charCode || e.keyCode || 0;
  var phone = $(this);
  if (phone.val().length === 0) {
    phone.val(phone.val() + '(');
  }
  // Auto-format- do not expose the mask as the user begins to type
  if (key !== 8 && key !== 9) {
    if (phone.val().length === 4) {
      phone.val(phone.val() + ')');
    }
    if (phone.val().length === 5) {
      phone.val(phone.val() + ' ');
    }
    if (phone.val().length === 9) {
      phone.val(phone.val() + '-');
    }
    if (phone.val().length >= 14) {
      phone.val(phone.val().slice(0, 13));
    }
  }

  // Allow numeric (and tab, backspace, delete) keys only
  return (key == 8 ||
    key == 9 ||
    key == 46 ||
    (key >= 48 && key <= 57) ||
    (key >= 96 && key <= 105));
})

.on('focus', function() {
  phone = $(this);

  if (phone.val().length === 0) {
    phone.val('(');
  } else {
    var val = phone.val();
    phone.val('').val(val); // Ensure cursor remains at the end
  }
})

.on('blur', function() {
  $phone = $(this);

  if ($phone.val() === '(') {
    $phone.val('');
  }
});

実例:JSFiddle


どのように私は==>(021)88888888のように左から右に番号を表示するには、このパターンを変更することができます
ムスタファ

3

このようなものを試してください。

jQuery.validator.addMethod("phoneValidate", function(number, element) {
    number = number.replace(/\s+/g, ""); 
    return this.optional(element) || number.length > 9 &&
        number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

$("#myform").validate({
  rules: {
    field: {
      required: true,
      phoneValidate: true
    }
  }
});

2

完全かつ有名なlibphonenumberの小さいバージョンであるlibphonenumber-js(https://github.com/halt-hammerzeit/libphonenumber-js)を検討してください。

素早く汚い例:

$(".phone-format").keyup(function() {
// Don't reformat backspace/delete so correcting mistakes is easier
if (event.keyCode != 46 && event.keyCode != 8) {
    var val_old = $(this).val();
    var newString = new libphonenumber.asYouType('US').input(val_old);
    $(this).focus().val('').val(newString);
}
});

(ライブラリのダウンロードを回避するために正規表現を使用する場合、バックスペース/削除時に再フォーマットを回避すると、タイプミスの修正が容易になります。)


2

代替ソリューション:

function numberWithSpaces(value, pattern) {
  var i = 0,
    phone = value.toString();
  return pattern.replace(/#/g, _ => phone[i++]);
}

console.log(numberWithSpaces('2124771000', '###-###-####'));


1

jQueryプラグインを使用して電話番号を自動フォーマットする方法を探しているときに、この質問を見つけました。受け入れられた回答は私のニーズには理想的ではなく、最初に投稿されてから6年間で多くのことが起こりました。私は最終的に解決策を見つけ、後世のためにここに文書化しています。

問題

電話番号のhtml入力フィールドに、ユーザーが入力した値を自動フォーマット(マスク)したいと思います。

解決

Cleave.jsをチェックしてください。これは、この問題や他の多くのデータマスキングの問題を解決するための非常に強力で柔軟で簡単な方法です。

電話番号のフォーマットは次のように簡単です。

var cleave = new Cleave('.input-element', {
    phone: true,
    phoneRegionCode: 'US'
});

1

入力:

4546644645

コード:

PhoneNumber = Input.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, "($1)$2-$3");

出力:

(454)664-4645

0
 $(".phoneString").text(function(i, text) {
            text = text.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
            return text;
        });

出力:-( 123)657-8963


-2

これが役立つかもしれません

var countryCode = +91;
var phone=1234567890;
phone=phone.split('').reverse().join('');//0987654321
var formatPhone=phone.substring(0,4)+'-';//0987-
phone=phone.replace(phone.substring(0,4),'');//654321
while(phone.length>0){
formatPhone=formatPhone+phone.substring(0,3)+'-';
phone=phone.replace(phone.substring(0,3),'');
}
formatPhone=countryCode+formatPhone.split('').reverse().join('');

あなたは+ 91-123-456-7890を取得します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.