ロゴ(青) Excel/VBA Tips ロゴ(緑)

Tips29: JavaScript で電話番号(局番)の検証/編集 ( page 3 )
             [ 多言語移植… JAVA, PHP, Perl, Python, Ruby, VBA/VB6, VB.net ]

        [ 更新履歴 ]  2019/2/14 : β1.00  ,  2019/3/24 : β 4.40  ,  2019/4/4 : Ver 1.00
                             2019/5/11 : 番号翻訳テーブルを [ 2019/5/7 版 ] に差替えました
                             2020/7/20 : 番号翻訳テーブルを [ 2020/6/1 版 ] に差替えました
                             2022/8/2 : 番号翻訳テーブルを [ 2022/7/1 版 ] に差替えました

電話番号翻訳 テーブル を JSON ファイルから読込み  ⇒  TelephoneCheck_withJSON.js ( ベース バージョン )
            〃                  を ソースコード 内に収録      ⇒  TelephoneCheck.js ( 派生 バージョン )

--- [ Page 1 ] ---
  ( 電話番号の 編集 & 検証 ツール )
  1. 電話番号 編集/検証 ツール [ TelephoneCheck ] について
  2. 固定電話の電話番号について
  3. 番号翻訳テーブル ( JSON ファイル ) の構造
  [ 番号翻訳テーブル 番号翻訳シュミレーター ]
--- [ Page 2 ] ---
  4. TelephonCheck ツール 関数 リファレンス
             [ 仕 様 ]  [ ValidateTelephone ]  [ FormatTelephone ]  [ GetTypeTelephone ]  [ InitTelephone ]  [ PhoneNumber ]
  5. ダウンロード / 使用条件 / 更新履歴 他
 
>>> [ Page 3 ] <<<
  6. 多言語 移植について / 言語別 留意事項  
            [ JAVA , PHP , Perl , Python , Ruby , VBA/VB6 , VB.net ]
------------------------------------------
  [ デバッグ用 テストツール ]    [ カラー表示 ソース コード ]    [ 移植時 言語仕様 把握 ポイント 一覧 ( PDF , A3 ) ]
 

[ この場所への リンク ]


6. 多言語 移植について / 言語別 留意事項

-- ここで紹介する多言語版について --
( a ) ツールの関数名は「全ての言語版」で同じです。
      尚、一部言語では 「オール小文字, アンダーバー区切り」になります。
      機能/使用方法も同じです。 一部、返却値の受け取り方に違いがありますが、以下で説明します。

( b ) 番号翻訳テーブル ( AreaCode4JSON.json ) の内容を直接 ソースコード内に収録 しています。
      実際の定義内容は各言語のソースコードを閲覧してください。

      各言語内包用の「配列データ」ソースコードは、JSONファイル( AreaCode4JSON.json )作成ツールで
      一緒に作成しています。したがって各「配列データ」ソースコードの 同一性/正確性 は保障します。

      現在の番号翻訳テーブルの内容は [ 2022/7/1 版 ] です。
      尚、局番の変更は、郵便番号のように毎月実施されるものではありません。
      したがって、ソースコード埋め込み版による運用で今後も全く支障はありません
              局番の変更は下記 ( 086-CDE 化 , 2013年 ) を最後に実施されていません ( 2019年3月 現在 )
                      [ 08636-E ⇒ 086-36E ( E: 2-5, 7-9 )  ,  0867-2E ⇒ 086-72E ( E: 2-4, 6, 8 )  ,  0867-3E ⇒ 086-73E ( E: 7, 8 ) ]
                  2019/5/7 版 変更内容
                        [ 局番の追加 : 025-60x , 025-80x ]
                  2020/6/1 版 変更内容
                        [ 局番の追加 : 0158-3x , 0163-9x , 0539-61 , 0865-50 , 0980-6x , 0980-9x ]
                        [ 局番の削除 : 015-41x , 0163-7x , 0164-7x , 0278-4x , 086-365 , 086-367 , 086-998 ]
                 2022/7/1 版 変更内容
                        [ 市内局番化 : 09496-x  ⇒  0949-6x ]
                        [ 局番の削除 : 0256-26 , 0283-78 , 0428-98 , 086-369 ]

( c ) 多言語版は JavaScript ( JSON 未使用版  TelephoneCheck.js ) を基にして作成しています。

( d ) デバッグ/検証用のテストツールは こちら です。

( e ) 引数のチェック処理については各言語で以下の方式にしています。
            TelCode  :  先頭 '0' の数字のみの文字列 ( ValidateTelephone でも 数字のみが可 )
            EditType  :  1〜6 の数値
    < 引数 を 未指定 > < 引数値 の 型 ( string  or  int ) >
  JavaScript undifined 判定で対応してエラーにする。
 
「引数の型宣言」機能が無い。
typeof  演算子で判定し所定の型に変換する。
EditType は[1文字の'1'〜'6'] と正規表現比較。
 
  JAVA 対応無し。 呼び出し側 メソッド
での コンパイルエラー 任せ。
 
引数定義で型宣言を指定する。
 
  PHP 引数定義でデフォルト値を指定し、
引数の妥当性チェックでエラーにする。
 
PHP7 : 引数定義で int / string 型宣言が 可。
PHP5 :       〃            〃            が 不可。

is_string / is_float / is_int 関数で判定し
所定の型に変換する。
EditType は[1文字の'1'〜'6'] と正規表現比較。

  Perl defined 関数の判定で対応して
エラーにする。
 
「引数の型宣言」機能が無い。
空文字('')を連結して強制的に文字列型、
1を掛けて( *1 )強制的に数値型にする。
EditType は[1文字の'1'〜'6'] と正規表現比較。
 
  Python 引数定義でデフォルト値を指定し、
引数の妥当性チェックでエラーにする。
 
「引数の型宣言」機能が無い。
type 関数で判定し所定の型に変換する。
EditType は[1文字の'1'〜'6'] と正規表現比較。
 
  Ruby 引数定義でデフォルト値を指定し、
引数の妥当性チェックでエラーにする。
 
「引数の型宣言」機能が無い。
is_a? メソッド で判定し所定の型に変換する。
EditType は[1文字の'1'〜'6'] と正規表現比較。
 
 
その他、移植する上で 把握しておくべき ポイント ( PDF ) を言語別 に 纏めてあります。
その ポイント さえ把握できていれば、上記以外の言語への移植も容易です。 A3サイズなので 印刷は[ A3⇒A4 縮小 ]。

[ この場所へのリンク ]
---------------------------------------------------------------------------------------------
( 1 ) JAVA 移植版     [ カラー表示 ソースコード ]   Eclipse / JAVA 8u192 で動作確認済
          ・ ソースコード : TelephoneCheck.java ( Ver 1.00  2022/8/2 ) 文字コード: UTF-8N
          ・ 現在の局番データ は 2022/7/1 版です( 上記 6-(b) 参照 )。
          ・ 利用上の留意点
              ( a ) 返却値は TelephoneCheckValue / TelephoneType クラスオブジェクト(下記)になります。
                    下記 クラス の コンストラクタ で初期値が設定されますので、他の言語版のような InitTelephone 関数
                    はありません。

  -- VaridateTelephone / FormatTelephone --  -- GetTypeTelephone -- 
  public static class TelephoneCheckValue {
    public int TelType;
    public int EditType;
    public String TelEdit;
    public int ErrId;
}
 
public static class TelephoneType {
    public int TelType;
    public int SizeAll;
    public int Size1;
    public int Size2;
    public int Size3;
    public int ErrId;
}

         TelephoneCheckValue Result = new TelephoneCheckValue();
         Result = FormatTelephone(TelNumber, 1);
         if (Result.ErrId == 0) {
             xxx = Result.TelEdit;

         -- PhoneNumber 利用例 --
         If (PhoneNumber(TelNumber, "V").equals("0")) {
             // 検証NG ( "0" )
         } else {
             // 検証OK ( "1" or "2" )
         }
         String EditTelphone = PhoneNumber(TelNumber, "F1");  // 編集エラーは "Phone Error"


              ( テストツール の コード も参照してください )

[ この場所へのリンク ]
---------------------------------------------------------------------------------------------
( 2 ) PHP 移植版     [ カラー表示 ソースコード ]   Eclipse / PHP 5.6.39 で動作確認済
          ・ ソースコード : TelephoneCheck.php ( Ver 1.00  2022/8/2 ) 文字コー: UTF-8N
          ・ 現在の局番データ は 2022/7/1 版です( 上記 6-(b) 参照 )。
          ・ 利用上の留意点
              ( a ) 返却値は以下の連想配列になります。
                 ValidateTelephone / Formattelephone : [TelType, EditType, TelEdit, ErrId]
                 GetTypeTelephone : [TelType, SizeAll, Size1, Size2, Size3, ErrId]

         $Result = InitTelephone("Value");
         $Result = FormatTelephone($TelNumber, 1);
         if ($Result["ErrId"] == 0) {
             xxx = $Result["TelEdit"];

         -- PhoneNumber 利用例 --
         If ((bool)PhoneNumber($TelNumber, "V")) {
             // 検証OK ( 1 or 2 )
         } else {
             // 検証NG ( 0 )
         }
         $EditTelphone = PhoneNumber($TelNumber, "F1");  // 編集エラーは "Phone Error"

              ( テストツール の コード も参照してください )

[ この場所へのリンク ]
---------------------------------------------------------------------------------------------
( 3 ) Perl 移植版     [ カラー表示 ソースコード ]  Padre / Perl 5.14.2 で動作確認済
          ・ ソースコード : TelephoneCheck.pl ( Ver 1.00  2022/8/2 ) 文字コード:UTF-8N
          ・ 現在の局番データ は 2022/7/1 版です( 上記 6-(b) 参照 )。
          ・ 利用上の留意点
              ( a ) 返却値は以下の連想配列になります。
                 ValidateTelephone / Formattelephone : (TelType, EditType, TelEdit, ErrId)
                 GetTypeTelephone : (TelType, SizeAll, Size1, Size2, Size3, ErrId)

         my %Result = InitTelephone("Value");
         %Result = FormatTelephone($TelNumber, 1);
         if ($Result{ErrId} == 0) {
             xxx = $Result{TelEdit};

         -- PhoneNumber 利用例 --
         If (PhoneNumber($TelNumber, "V")) {
             # 検証OK ( 1 or 2 )
         } else {
             # 検証NG ( 0 )
         }
         $EditTelphone = PhoneNumber($TelNumber, "F1");  # 編集エラーは "Phone Error"

              ( テストツール の コード も参照してください )

[ この場所へのリンク ]
---------------------------------------------------------------------------------------------
( 4 ) Python 移植版     [ カラー表示 ソースコード ]  IDLE / Python 3.7.2 で動作確認済
          ・ ソースコード : TelephoneCheck.py ( Ver 1.00  2022/8/2 ) 文字コード:UTF-8N, TABインデント
          ・ 現在の局番データ は 2022/7/1 版です( 上記 6-(b) 参照 )。
          ・ 利用上の留意点
              ( a ) 返却値は以下の辞書オブジェクトになります(キーは大文字混じり)。
                 validate_telephone / format_telephone : {TelType, EditType, TelEdit, ErrId}
                 get_type_telephone : {TelType, SizeAll, Size1, Size2, Size3, ErrId}

         result = init_telephone('Value')
         result = format_telephone(tel_number, 1)
         if (result['ErrId'] == 0):
             xxx = result['TelEdit']

         -- PhoneNumber 利用例 --
         If (bool(phone_number(tel_number, "V"))):
             # 検証OK ( 1 or 2 )
         else:
             # 検証NG ( 0 )

         edit_telphone = phone_number(tel_number, "F1");  # 編集エラーは "Phone Error"

              ( テストツール の コード も参照してください )

[ この場所へのリンク ]
---------------------------------------------------------------------------------------------
( 5 ) Ruby 移植版     [ カラー表示 ソースコード ]  Eclipse / Ruby 2.5.3 で動作確認済
          ・ ソースコード : TelephoneCheck.rb ( Ver 1.00  2022/8/2 ) 文字コード:UTF-8N
          ・ 現在の局番データ は 2022/7/1 版です( 上記 6-(b) 参照 )。
          ・ 利用上の留意点
              ( a ) 返却値は以下のハッシュ ( キー は シンボル指定/大文字混じり ) になります。
                 validate_telephone / format_telephone : {TelType, EditType, TelEdit, ErrId}
                 get_type_telephone : {TelType, SizeAll, Size1, Size2, Size3, ErrId}

         result = init_telephone("Value")
         result = format_telephone(tel_number, 1)
         if (result[:ErrId] == 0):
             xxx = result[:TelEdit]

         -- PhoneNumber 利用例 --
         If (bool(phone_number(tel_number, "V")))
             # 検証OK ( 1 or 2 )
         else
             # 検証NG ( false , Ruby 版では 0 の代わりに false を返します )
         end
         edit_telphone = phone_number(tel_number, "F1")  # 編集エラーは "Phone Error"

              ( テストツール の コード も参照してください )

[ この場所へのリンク ]
---------------------------------------------------------------------------------------------
( 6 ) VBA / VB6 移植版     [ カラー表示 ソースコード ]  Excel 2010/VBA で動作確認済
          ・ ソースコード : TelephoneCheck_VBA.bas ( Ver 1.00  2022/8/2 ) 文字コード:Shift_JIS
          ・ 現在の局番データ は 2022/7/1 版です( 上記 6-(b) 参照 )。
          ・ PhoneNumber 関数を kt関数アドイン(Ver 5.30)に ktPhoneNumber の名前で収録しています
          ・ Excel 向けアドイン [ PhoneNumberAddin.xla ] をダウンロードに用意してあります。
          ・ 利用上の留意点
              ( a ) Excel に限らず、Office 2000 以降のアプリケーション ( Access 等 ) で利用できます。

              ( b ) ソースコードファイル( TelephoneCheck_VBA.bas ) を「インポート」でワークブック等に
                    組み込んでください。 モジュール名指定の Attribute ステートメントが入っていますので、
                    インポートすれば標準モジュール [ TelephoneCheck ] として組み込まれます。

              ( c ) 返却値は ValidateTelephone / FormatTelephone / GetTypeTelephone
                    3関数【共通】の下記 ユーザー定義型 ( Type ) です。
                    初期化関数の InitTelephone は「引数無し」です。
                      Public Type TelephoneStruct
                          TelType   As Integer
                          EditType  As Integer
                          TelEdit   As String
                          ErrId     As Integer
                          SizeAll   As Integer
                          Size1     As Integer
                          Size2     As Integer
                          Size3     As Integer
                      End Type

              ( d ) FreeRegExpTelephone サブルーチン
                    正規表現チェック用オブジェクト(VBScript.RegExp)の消去を行なうサブルーチンです。
                    マクロの一覧に載らないようにダミー引数を設けています。引数には 0 を指定します。
                        Call FreeRegExpTelephone( 0 )

                    VBA/VB6版では、正規表現処理で [ CreateObject("VBScript.RegExp") ] を使用します。
                    連続して何十/何百回と処理を繰り返し行なうケースを想定した場合、オブジェクトを毎回生成
                    すると処理速度が非常に落ちてしまいます。それを回避する為に、VBScript.RegExpオブジェクト
                    を【モジュールレベル変数】としました( ソースコード参照 )。
                    FreeRegExpTelephone はモジュールレベル変数の RegExp を解放する為のサブルーチンです。
                    尚、このサブルーチンを使わず、アプリケーション終了時の自動解放に任せても構いません


         Dim Result As TelephoneStruct
         Result = InitTelephone()
         Result = FormatTelephone(TelNumber, 1)
         If (Result.ErrId = 0) Then
             xxx = result.TelEdit

         -- PhoneNumber 利用例 --
         If (CBool(PhoneNumber(TelNumber, "V"))) Then
             ' 検証OK ( 1 or 2 )
         Else
             ' 検証NG ( 0 )
         End If
         EditTelphone = PhoneNumber(TelNumber, "F1")  ' 編集エラーは "Phone Error"

              ( テストツール の コード も参照してください )

[ この場所へのリンク ]
---------------------------------------------------------------------------------------------
( 7 ) VB.net 移植版     [ カラー表示 ソースコード ]  VB 2017(VS 2017) / .NET Framework 4.6.2で 動作確認済
          ・ ソースコード : TelephoneCheck_VBnet.vb ( Ver 1.00  2022/8/2 ) 文字コード:Shift_JIS
          ・ 現在の局番データ は 2022/7/1 版です( 上記 6-(b) 参照 )。
          ・ 利用上の留意点
              返却値は下記の構造体 ( TelephoneCheckValue / TelephoneType  Structure )になります。
              初期化は構造体に定義してある New コンストラクタで行ないます。変数定義の際はダミー引数で
              0 を指定してください。他の言語版のような InitTelephone 関数はありません。

  -- VaridateTelephone / FormatTelephone --  -- GetTypeTelephone -- 
  Public Structure TelephoneCheckValue
    Public TelType As Integer
    Public EditType As Integer
    Public TelEdit As String
    Public ErrId As Integer
End Structure
 
Public Structure TelephoneType
    Public TelType As Integer
    Public SizeAll As Integer
    Public Size1 As Integer
    Public Size2 As Integer
    Public Size3 As Integer
    Public ErrId As Integer
End Structure
 

              PhoneNumber 関数は オーバーロード関数 ( 返却値の型が変わります )です。
                  第2引数:Action を省略
                        ・・・ ValidateTelephone による検証。 返却値は数値 ( 0, 1, 2 )です。
                  第2引数: Action に 数値( 1 〜 6 ) を指定
                        ・・・ FormatTelephone による編集。 返却値は文字列です。


          Dim Result As New TelephoneCheckValue( 0 )
          Result = FormatTelephone(TelNumber, 1)
          If (Result.ErrId = 0) Then
              xxx = Result.TelEdit

         -- PhoneNumber 利用例 --
         If (CBool(PhoneNumber(TelNumber))) Then
             ' 検証OK ( 1 or 2 )
         Else
             ' 検証NG ( 0 )
         End If
         EditTelphone = PhoneNumber(TelNumber, 1)  ' 編集エラーは "Phone Error"

              ( テストツール の コード も参照してください )

---------------------------------------------------------------------------------------------



--------------------------------------------------------------------------
--- [ Page 1 ] ---
  ( 電話番号の 編集 & 検証 ツール )
  1. 電話番号 編集/検証 ツール [ TelephoneCheck ] について
  2. 固定電話の電話番号について
  3. 番号翻訳テーブル ( JSON ファイル ) の構造   [ 番号翻訳テーブル 翻訳シュミレーター ]
--- [ Page 2 ] ---
  4. TelephonCheck ツール 関数 リファレンス
  5. ダウンロード / 使用条件 / 更新履歴 他
>>> [ Page 3 ] <<<
  6. 多言語 移植について / 言語別 留意事項  
--------------
  [ デバッグ用 テストツール ]    [ カラー表示 ソース コード ]    [ 移植時 言語仕様 把握 ポイント 一覧 ( PDF , A3 ) ]
--------------------------------------------------------------------------
ロゴ(ゴールド)   ロゴ(ピンク)

角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2019 Allrights Reserved.