コンニチハ、ジョージデス。タマニハ マジメナキジヲ トウコウシマス。
例えば、カスタム App のお客様情報フォームに「漢字の姓名」と一緒に「ふりがな」も追加しておけば、後々に検索条件のフィールドに利用できて大変便利ですね。
しかしながら「ふりがな」を入力すべきフィールドに間違って「漢字」で入力されてしまったら、どうやって入力制限すればよいでしょうか?
今日は FileMaker の標準機能だけを使って、入力された内容が Unicode のコード表で「ひらがな」の範囲に含まれているか判定し、逸脱していた場合はエラーメッセージを表示する事にチャレンジしてみましょう。
Code 関数
FileMaker 標準関数のひとつに Code 関数があります。これは テキスト内の文字の Unicode コードポイントを返してくれます。
例えば、以下の計算式の出力は「12353」になります。
Code("ぁ") //小文字の「ぁ」
Unicode について
続いて、先程出力された「12353」について考察します。Unicode と「ひらがな」の対応は以下のページから確認する事ができます。
コード表から、ひらがなの「ぁ」は「3041」対応していますが、FileMaker の Code 関数に対応する為に 10 進数に変換する必要があります。
3×(16^3) + 0×(16^2) + 4×(16) + 1 = 12353
この対応で考えれば Unicode の「3041〜309F」、つまり、入力された文字を Code 関数で判定して「12353 〜12447」に含まれていれば「ひらがな」であると判定できます。
※ 表に含まれていない「〜」や「ー」は別途対応する必要があります。
カスタム関数
つづいて、入力された内容を 1 文字ずつシフトして、コード表の範囲に含まれているかカスタム関数に置き換えましょう。ループを使った単純な演算なので、よくみれば理解できると思います。
UnicodeRange( text; from; to )
第1引数:判定したい文字列
第2引数:Unicode 表の開始 ポイント 10 進数
第3引数:Unicode 表の終了 ポイント 10 進数
While ([
/*
TEXT = "あいうえお";
FROM = 12353;
TO = 12447;
*/
TEXT = text;
FROM = from;
TO = to;
i = Length ( TEXT );
r = If( i; True; False ) //TEXT が空だった場合の初期値
];
i > 0 ; //ループ継続条件
[
CODE = GetAsNumber ( Code ( Right ( TEXT ; 1 ) ) ); //右からチェックしないと桁がずれる
i = i - 1;
r = If ( CODE < FROM or CODE > TO; False; r );
TEXT = Left ( TEXT ; i )
] ;
r
)
入力値の制限
カスタム関数を使って、入力値の制限を加えてみましょう。
※ 空欄でもメッセージが表示されますが、気になる方は調整してください。
カタカナや漢字
カタカナや漢字に対応するには Unicode 表の範囲を以下より参照して、From と To の値をかえるだけで「カタカナや漢字」にも対応が可能です。
気になる方はチャレンジしてみてくださいね!