質問: 掲題の件、 文字列に補助漢字(JIS X 0212-1990)が含まれているかをチェックする方法はございますか? ご教示お願いいたします。
回答: > > 文字列に補助漢字(JIS X 0212-1990)が含まれているかをチェックする > > > 正規表現を使ってチェックする方法があります。 文字クラス(角かっこ "[ ]" で囲むことで定義される正規表現内のミニ言語)で対象とする JIS X 0212 の文字を定義したパターンを作り、それとチェック対象の文字列がマッチするか調べることで可能だと思います。 例えば以下のようにしてチェックできます。(かなり基本的かつ愚直な例です。もっと簡単かつスマートな方法があるかもしれません) C# では文字列の内部表現が UTF-16 になっています。 一方 JIS X 0212 の文字は全て Unicode に含まれているそうで、各文字に対応する Unicode は以下のようになっているそうです(注:これが JIS X 0212 全ての文字かは調べてません)。 JIS X 0212コード表(1)02-31区 なので、例えば(あくまで例えばです)、上の記事の表で、2 句 16 点にある文字と、7 句 32 点にある文字が含まれるかどうかをチェックするには、以下のようなパターン (pattern) を作って、それとチェック対象の文字列 (text1, text2, text3) がマッチするか否かを調べるということになります。(下の例では、text2 と text3 の 'あ' と 'い' の間に JIS X 0212 の文字が含まれています) ``` string pattern = @"[\u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\u007E\u0384\u0385\u0402-\u040F]"; string text1 = "0123 abc DEF あいうえおかきくけこ"; string text2 = "0123 abc DEF あ ̊いうえおかきくけこ"; string text3 = "0123 abc DEF あЄいうえおかきくけこ"; Console.WriteLine(Regex.IsMatch(text1, pattern).ToString()); Console.WriteLine(Regex.IsMatch(text2, pattern).ToString()); Console.WriteLine(Regex.IsMatch(text3, pattern).ToString()); // 結果は: // False // True // True ``` 問題はパターンで、7 句 32 点にある文字のように Unicode が連続していれば \u0402-\u040F とできますが、2 句 16 点にある文字のように連続していない場合は一文字ずつ \u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\u007E\u0384\u0385 というように書くことになります。 JIS X 0212 の文字全てということになるとそのあたりが上記の方法では愚直すぎで、もっと簡単かつスマートな方法があるかもしれません。(・・・が、自分は思いつきません。他の方の回答を期待してください) ところで、正規表現をご存知でしょうか? ご存じない、もしくは知識が曖昧ということでしたら以下の記事を読むことをお勧めします。(記事のタイトルが「ASP.NET の・・・」となってますが、「ASP.NET での検証」というセクションを除けば .NET アプリ全てに共通で、自分が知る限りですがこの記事が一番分かりやすかったです) ASP.NET の正規表現 文字クラス