Created
February 20, 2020 15:03
-
-
Save axjack/206e52a36bc16bc2f593ddc056e5b71f to your computer and use it in GitHub Desktop.
ハイフンなしの電話番号をハイフンありでフォーマットする
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
ハイフンなしの電話番号をハイフンありでフォーマットする | |
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; | |
} | |
} | |
} | |
} | |
} |
「終了していない文字列型の定数です」が出たとき → たぶん文字コードがアレな時に出ていると思われる。
C:\Users\Satoaki NOGUCHI\Desktop\test2.vbs(3, 16) Microsoft VBScript コンパイ ル エラー: 終了していない文字列型の定数です。
全角半角変換を記載し忘れた・・・。がこれを書こうとした時に上記のエラーが出たのであった(備忘録)
Function Zen2Han(str)
End Function
半角数字のみを抽出する関数
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
vbscript版を作成した。