固定電話やスマートホン、郵便番号等の数値文字列の正しい(多分)位置にハイフンを追加して返してくれるプロトタイプ関数です。
固定電話番号のハイフン位置については、総務省が公表している全国の市外局番情報を整形した配列(重複は除去している)を参考に作りました。
市外局番の一覧(令和4年3月1日現在)
https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/shigai_list.html
String.prototype.addHyphen = function () {
const exPhone = [11, 123, 124, 125, 126, 1267, 133, 134, 135, 136, 1372, 1374, 137, 1377, 138, 1392, 139, 1397, 1398, 142,
143, 144, 145, 1456, 1457, 146, 1466, 152, 153, 154, 1547, 15, 155, 1558, 156, 1564, 157, 158, 1586, 1587,
162, 1632, 1634, 1635, 163, 164, 1648, 165, 1654, 1655, 1656, 1658, 166, 167, 172, 173, 174, 175, 176, 17,
178, 179, 182, 183, 184, 185, 186, 187, 18, 191, 192, 193, 194, 195, 19, 197, 198, 22, 220, 223, 224, 225, 226,
228, 229, 233, 234, 235, 23, 237, 238, 240, 241, 242, 243, 244, 24, 246, 247, 248, 25, 250, 254, 255, 256, 257,
258, 259, 260, 261, 26, 263, 264, 265, 266, 267, 268, 269, 270, 27, 274, 276, 277, 278, 279, 280, 282, 283, 284,
285, 28, 287, 288, 289, 291, 29, 293, 294, 295, 296, 297, 299, 3, 422, 42, 428, 4, 43, 436, 438, 439, 44, 45, 460,
46, 463, 465, 466, 467, 470, 47, 475, 476, 478, 479, 48, 480, 49, 493, 494, 495, 4992, 4994, 4996, 4998, 52, 53,
531, 532, 533, 536, 537, 538, 539, 54, 544, 545, 547, 548, 550, 551, 55, 553, 554, 555, 556, 557, 558, 561, 562,
563, 564, 565, 566, 567, 568, 569, 572, 573, 574, 575, 576, 5769, 577, 578, 58, 581, 584, 585, 586, 587, 59, 594,
595, 596, 597, 5979, 598, 599, 6, 72, 721, 725, 73, 735, 736, 737, 738, 739, 740, 742, 743, 744, 745, 746, 7468,
747, 748, 749, 75, 761, 76, 763, 765, 766, 767, 768, 770, 771, 772, 773, 774, 77, 776, 778, 779, 78, 790, 791,
79, 794, 795, 796, 797, 798, 799, 82, 820, 823, 824, 826, 827, 829, 83, 833, 834, 835, 836, 837, 838, 8387, 8388,
8396, 845, 846, 847, 8477, 848, 84, 8512, 8514, 852, 853, 854, 855, 856, 857, 858, 859, 86, 863, 865, 866, 867,
868, 869, 875, 877, 87, 879, 880, 883, 884, 885, 88, 887, 889, 892, 893, 894, 895, 896, 897, 898, 89, 92, 920, 93,
930, 940, 942, 943, 944, 946, 947, 948, 949, 950, 952, 954, 955, 956, 957, 95, 959, 96, 964, 965, 966, 967, 968,
969, 972, 973, 974, 97, 977, 978, 979, 98, 980, 9802, 982, 983, 984, 985, 986, 987, 9912, 9913, 99, 993, 994,
995, 996, 9969, 997
];
const regExHandy = /^0[5789]0[0-9]{4}[0-9]{4}$/; // 携帯電話などにマッチする正規表現
const regExPhone = /^0[0-9]{9}$/; // 一般電話番号にマッチする正規表現
const regExZipcode = /^[0-9]{7}$/; // 郵便番号にマッチする正規表現
let val = this.replace(/-/g, '');
let valLen = val?.length;
switch (valLen) {
case 7: return (regExZipcode.test(val) ? `${val.substring(0, 3)}-${val.substring(3)}` : this);
case 10:
case 11:
if (regExHandy.test(val))
return `${val.substring(0, 3)}-${val.substring(3, 7)}-${val.substring(7, 11)}`;
else if (regExPhone.test(val)) {
for (let i = 4; i > 0; i--) {
if (exPhone.includes(Number(val.substring(1, i + 1))))
return `${val.substring(0, i + 1)}-${val.substring(i + 1, i + 1 + 5 - i)}-${val.substring(6, 10)}`;
}
return this;
} break;
default: return this;
}
return this;
}
}
郵便番号やスマホは決まった位置にハイフン追加すればいいけれど、固定電話の市外局番だけは決まった位置に追加出来ないので作ってみました。