Skip to content

Instantly share code, notes, and snippets.

@axjack
Created February 20, 2020 15:03
Show Gist options
  • Save axjack/206e52a36bc16bc2f593ddc056e5b71f to your computer and use it in GitHub Desktop.
Save axjack/206e52a36bc16bc2f593ddc056e5b71f to your computer and use it in GitHub Desktop.
ハイフンなしの電話番号をハイフンありでフォーマットする
/*
ハイフンなしの電話番号をハイフンありでフォーマットする
thanks to : https://qiita.com/kennyj@github/items/dde3880abb5071f649ab
*/
//S: 電話番号接頭辞集合
let S = ['03', '04', '06', '050', '070', '080', '090', '020', '011', '015', '017', '018', '019', '022', '023', '024', '025', '026', '027', '028', '029', '042', '043', '044', '045', '046', '047', '048', '049', '052', '053', '054', '055', '058', '059', '072', '073', '075', '076', '077', '078', '079', '082', '083', '084', '086', '087', '088', '089', '092', '093', '095', '096', '097', '098', '099', '0120', '0800', '0570', '0990', '0123', '0124', '0125', '0126', '0133', '0134', '0135', '0136', '0137', '0138', '0139', '0142', '0143', '0144', '0145', '0146', '0152', '0153', '0154', '0155', '0156', '0157', '0158', '0162', '0163', '0164', '0165', '0166', '0167', '0172', '0173', '0174', '0175', '0176', '0178', '0179', '0182', '0183', '0184', '0185', '0186', '0187', '0191', '0192', '0193', '0194', '0195', '0197', '0198', '0220', '0223', '0224', '0225', '0226', '0228', '0229', '0233', '0234', '0235', '0237', '0238', '0240', '0241', '0242', '0243', '0244', '0246', '0247', '0248', '0250', '0254', '0255', '0256', '0257', '0258', '0259', '0260', '0261', '0263', '0264', '0265', '0266', '0267', '0268', '0269', '0270', '0274', '0276', '0277', '0278', '0279', '0280', '0282', '0283', '0284', '0285', '0287', '0288', '0289', '0291', '0293', '0294', '0295', '0296', '0297', '0299', '0422', '0428', '0436', '0438', '0439', '0460', '0463', '0465', '0466', '0467', '0470', '0475', '0476', '0478', '0479', '0480', '0493', '0494', '0495', '0531', '0532', '0533', '0536', '0537', '0538', '0539', '0544', '0545', '0547', '0548', '0550', '0551', '0553', '0554', '0555', '0556', '0557', '0558', '0561', '0562', '0563', '0564', '0565', '0566', '0567', '0568', '0569', '0572', '0573', '0574', '0575', '0576', '0577', '0578', '0581', '0584', '0585', '0586', '0587', '0594', '0595', '0596', '0597', '0598', '0599', '0721', '0725', '0735', '0736', '0737', '0738', '0739', '0740', '0742', '0743', '0744', '0745', '0746', '0747', '0748', '0749', '0761', '0763', '0765', '0766', '0767', '0768', '0770', '0771', '0772', '0773', '0774', '0776', '0778', '0779', '0790', '0791', '0794', '0795', '0796', '0797', '0798', '0799', '0820', '0823', '0824', '0826', '0827', '0829', '0833', '0834', '0835', '0836', '0837', '0838', '0845', '0846', '0847', '0848', '0852', '0853', '0854', '0855', '0856', '0857', '0858', '0859', '0863', '0865', '0866', '0867', '0868', '0869', '0875', '0877', '0879', '0880', '0883', '0884', '0885', '0887', '0889', '0892', '0893', '0894', '0895', '0896', '0897', '0898', '0920', '0930', '0940', '0942', '0943', '0944', '0946', '0947', '0948', '0949', '0950', '0952', '0954', '0955', '0956', '0957', '0959', '0964', '0965', '0966', '0967', '0968', '0969', '0972', '0973', '0974', '0977', '0978', '0979', '0980', '0982', '0983', '0984', '0985', '0986', '0987', '0993', '0994', '0995', '0996', '0997', '01267', '01372', '01374', '01377', '01392', '01397', '01398', '01456', '01457', '01466', '01547', '01558', '01564', '01586', '01587', '01632', '01634', '01635', '01648', '01654', '01655', '01656', '01658', '04992', '04994', '04996', '04998', '05769', '05979', '07468', '08387', '08388', '08396', '08477', '08512', '08514', '09496', '09802', '09912', '09913', '09969'];
/**
* hostへ文字列を出力する関数
* @param {string} str
* @example
* disp("Hello, World!")
*/
function disp(str) {
//console.log(str);
display.log(str);
}
/**
* 指定した3桁の数字区切りで電話番号をハイフンフォーマットする関数
* @param {string} telnum - ハイフンなしの電話番号
* @param {string} fmt - フォーマット用の3桁の数値
* @return {string} ハイフン付きでフォーマットされた電話番号
* @example
* let tel_formtd = FormatTelnum("0120112222","424")
* // tel_formtd = "0120-11-2222"
*/
function FormatTelnum(telnum, fmt) {
let fmt0 = fmt[0] - 0;
let fmt1 = fmt[1] - 0;
let fmt2 = fmt[2] - 0;
let t1 = telnum.substring(0, fmt0);
let t2 = telnum.substring(fmt0, fmt0 + fmt1);
let t3 = telnum.substring(fmt0 + fmt1);
let output = t1 + "-" + t2 + "-" + t3;
return output;
}
/**
* 電話番号接頭辞集合Sに電話番号telnumが含まれているか調べる関数
* @param {string} telnum - ハイフンなしの電話番号
* @return {string} 電話番号接頭辞もしくは"notfound"を返す
*/
function FindTelnumPrefix(telnum) {
let prefix_ = "notfound";
for (let i = 0; i < S.length; i++) {
if (S[i] === telnum.substring(0, S[i].length)) {
prefix_ = S[i];
}
}
return prefix_;
}
//例
//電話番号
let t = "0120333906";
main(t);
function main(t) {
if (t.length < 10) {
disp(t)
} else {
let prefix = FindTelnumPrefix(t);
if (prefix == "notfound") {
switch (t.length) {
case 11:
disp(FormatTelnum(t, "344"));
break;
case 10:
disp(FormatTelnum(t, "334"));
break;
default:
disp(t);
break;
}
} else {
if ((prefix == "0120") || (prefix == "0570")) {
disp(FormatTelnum(t, "433"));
} else {
switch (prefix.length) {
case 2:
disp(FormatTelnum(t, "244"));
break;
case 3:
disp(FormatTelnum(t, "334"));
break;
case 4:
disp(FormatTelnum(t, "424"));
break;
case 5:
disp(FormatTelnum(t, "514"));
break;
}
}
}
}
}
@axjack
Copy link
Author

axjack commented Feb 21, 2020

「終了していない文字列型の定数です」が出たとき → たぶん文字コードがアレな時に出ていると思われる。

C:\Users\Satoaki NOGUCHI\Desktop\test2.vbs(3, 16) Microsoft VBScript コンパイ ル エラー: 終了していない文字列型の定数です。

see https://oshiete.goo.ne.jp/qa/8213411.html

@axjack
Copy link
Author

axjack commented Feb 21, 2020

全角半角変換を記載し忘れた・・・。がこれを書こうとした時に上記のエラーが出たのであった(備忘録)

Function Zen2Han(str)
  
End Function

@axjack
Copy link
Author

axjack commented Feb 24, 2020

半角数字のみを抽出する関数

dim re
set re = createObject("VBScript.RegExp")

'test
disp( extractHWNumber("0120-(00)-1234") )

'Copyright (C) Microsoft Corporation. All rights reserved.
'
'0120001234


'
'  文字列から半角数字抽出する関数
'  @param {string} inp - 半角数字を含んだ文字列
'  @return {string} 半角数字のみの文字列
'  @example 
'  telnumber = extractHWNumber("0120-(00)-1234")
'  // telnumber = "0120001234"
'
function extractHWNumber(inp)
  'thanks to https://vbabeginner.net/vba%E3%81%A7%E6%96%87%E5%AD%97%E5%88%97%E3%81%8B%E3%82%89%E6%95%B0%E5%AD%97%E3%81%AE%E3%81%BF%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B/
  re.pattern = "[^0-9]"
  re.global = true
  extractHWNumber = re.replace(inp,"")
end function


Sub disp(str)
    'display.log(str)
    'console.log(str)
    'WinActorでの利用を考えると、ここでSetUMSVariableを呼び出すなど。
  WScript.Echo(str)
End Sub

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment