掲題の件、
文字列に補助漢字(JIS X 0212-1990)が含まれているかをチェックする方法はございますか?
ご教示お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/08 01:24
回答1件
0
ベストアンサー
文字列に補助漢字(JIS X 0212-1990)が含まれているかをチェックする
正規表現を使ってチェックする方法があります。
文字クラス(角かっこ "[ ]" で囲むことで定義される正規表現内のミニ言語)で対象とする JIS X 0212 の文字を定義したパターンを作り、それとチェック対象の文字列がマッチするか調べることで可能だと思います。
例えば以下のようにしてチェックできます。(かなり基本的かつ愚直な例です。もっと簡単かつスマートな方法があるかもしれません)
C# では文字列の内部表現が UTF-16 になっています。
一方 JIS X 0212 の文字は全て Unicode に含まれているそうで、各文字に対応する Unicode は以下のようになっているそうです(注:これが JIS X 0212 全ての文字かは調べてません)。
JIS X 0212コード表(1)02-31区
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0212/jisx0212-1.html
なので、例えば(あくまで例えばです)、上の記事の表で、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 の正規表現 文字クラス
https://msdn.microsoft.com/ja-jp/library/ms972966.aspx
投稿2017/11/08 04:07
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。