前回は全角/半角の入力チェックが Nomad で動かず、対策した話をしました。文字コードがノーツクライアント(Windows)と違うことが原因だったのですが、同様の理由でもう一つ問題が発生した機能があります。それが全銀仕様で利用できる文字化チェックする機能です。
利用できる文字と 判定方法
全銀仕様で利用できる文字に関しては、ネットを調べるとすぐにわかります。何のご縁もないのですが但馬信用金庫さんの以下のサイトわかりやすかったので参考にさせていただきました。
半角カタカナが許可されているのですが、ヲ と ー(長音)は除外されています。そして、-(ハイフン)や括弧など一部の記号が使えます。
これまで、文字の判定は Asc 関数で文字コードを取得して判定していましたが、Nomad は、文字コードが違うためそのままでは利用できません。例えば、半角の ア は、Windows では 177、Nomad iOS では 15711665 となります。
サンプルプログラム
文字コードに応じた判定プログラムを作成することは可能かと思います。ただ、実行環境の文字コードを判定したり、利用可能文字の文字コードを調べるのは面倒です。
そこで、今回は使用できる文字が限られていることを利用します。使用可能文字のリストを作成し、チェックする文字がそこに含まれているのか確認する方法で対応します。
サンプルプログラムを以下に紹介します(スクリプトライブラリ内に記述する前提)。
◇ 定数宣言
まず、使用可能文字を定数として宣言します。
Option Declare Private Const xsZengin_Ei = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Private Const xsZengin_Su = "1234567890" Private Const xsZengin_Kana = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン" Private Const xsZengin_Special = "゙゚\「」()/.- " |
◇ 全銀仕様の文字列か判定する関数
引数の文字列をチェックして、全銀仕様の文字で構成されている文字列なら True を返します。使用可能文字を変数 s に集めて、サブ関数 IsSubsetOfChars に渡してチェックしています。
Public Function IsZengin(ByVal vsTarget As String) As Boolean Dim s As String '許可された文字列 s = xsZengin_Ei '全銀半角英字 s = s & xsZengin_Su '全銀半角数字 s = s & xsZengin_Kana '全銀半角カナ s = s & xsZengin_Special '全銀半角記号 IsZengin = IsSubsetOfChars(vsTarget, s) End Function |
◇許可文字だけか判定
チェック対象の文字列 vsTarget が、許可された文字 vsAllowed のみで構成されているかどうか判定する関数です。
Public Function IsSubsetOfChars(ByVal vsTarget As String, ByVal vsAllowed As String) As Boolean Dim i As Integer Dim j As Integer Dim s As String Dim b As Boolean b = True '1 文字ずつ取得して許可されている文字か判定 For i = 1 To Len(vsTarget) s = Mid(vsTarget, i, 1) j = InStr(vsAllowed, s) If j = 0 Then '見つからない(= 許可されていない文字) b = False Exit For End If Next IsSubsetOfChars = b End Function |
許可された文字列に含まれているかの判定は InStr 関数を利用して単純化しています。
まとめ
今回紹介したサンプルでは文字コードを使用した判定を行わず、実際の文字と比較しています。よって、プログラムが実行される OS など、環境に依存しないプログラムにできたと思います。
0 件のコメント:
コメントを投稿