かっこいい日本語判定

  • URLをコピーしました!

コンニチハ、ジョージデス。タマニハ マジメナキジヲ トウコウシマス。

例えば、カスタム App のお客様情報フォームに「漢字の姓名」と一緒に「ふりがな」も追加しておけば、後々に検索条件のフィールドに利用できて大変便利ですね。

しかしながら「ふりがな」を入力すべきフィールドに間違って「漢字」で入力されてしまったら、どうやって入力制限すればよいでしょうか?

今日は FileMaker の標準機能だけを使って、入力された内容が Unicode のコード表で「ひらがな」の範囲に含まれているか判定し、逸脱していた場合はエラーメッセージを表示する事にチャレンジしてみましょう。

スクリーンショット 2022-11-16 11.02.33.png (51.6 kB)

Code 関数

FileMaker 標準関数のひとつに Code 関数があります。これは テキスト内の文字の Unicode コードポイントを返してくれます。

Code
https://help.claris.com/ja/pro-help/content/code.html

例えば、以下の計算式の出力は「12353」になります。

Code("ぁ")  //小文字の「ぁ」
スクリーンショット 2022-11-16 11.28.09.png (58.6 kB)

Unicode について

続いて、先程出力された「12353」について考察します。Unicode と「ひらがな」の対応は以下のページから確認する事ができます。

ひらがな
http://www.unicode.org/charts/PDF/U3040.pdf

コード表から、ひらがなの「ぁ」は「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
)
スクリーンショット 2022-11-16 11.40.57.png (75.6 kB)

入力値の制限

カスタム関数を使って、入力値の制限を加えてみましょう。
※ 空欄でもメッセージが表示されますが、気になる方は調整してください。

スクリーンショット 2022-11-16 11.42.24.png (53.5 kB)
スクリーンショット 2022-11-16 11.42.20.png (56.4 kB)
スクリーンショット 2022-11-16 11.42.04.png (82.4 kB)
スクリーンショット 2022-11-16 11.47.54.png (64.2 kB)

カタカナや漢字

カタカナや漢字に対応するには Unicode 表の範囲を以下より参照して、From と To の値をかえるだけで「カタカナや漢字」にも対応が可能です。

カタカナ:12448〜12543
http://www.unicode.org/charts/PDF/U30A0.pdf

漢字 :19968〜41217
http://www.unicode.org/charts/PDF/U4E00.pdf

気になる方はチャレンジしてみてくださいね!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!