.NET TIPS

文字列のひらがな/カタカナをチェックするには?

デジタルアドバンテージ
2003/08/22

 .NET Frameworkのクラス・ライブラリには、文字列(もしくは文字)がひらがなか、あるいはカタカナかをチェックするための特定のメソッドは用意されていない。そのため、それを調べるには各文字の文字コードをチェックする必要がある。ただし、.NET Frameworkの正規表現クラスでは、ひらがなやカタカナの文字コードの範囲(ブロック)を定義している「名前付き文字クラス」と呼ばれるものがサポートされている。これを利用すれば文字列のひらがな/カタカナを簡単に調べることができる。

ひらがな/カタカナを表す正規表現

 Unicodeの規格制定団体であるUTC(Unicode Technical Committee)は、http://www.unicode.org/Public/UNIDATA/Blocks.txtにおいてUnicode文字のブロックの範囲を定義している。このドキュメントには、日本語の文字に関するブロックとして次のようなものがある。

文字の種類 ブロックの範囲(16進表記) ブロック名
ひらがな 3040 〜 309F Hiragana
カタカナ 30A0 〜 30FF Katakana
漢字 4E00 〜 9FFF CJK Unified Ideographs

 ここで、次に示すように表中のブロック名の先頭に“Is”を付け文字列を中カッコでくくり、“\p”を付けたものが正規表現における「名前付き文字クラス」となる(文字列が漢字だけからなるかどうかのチェックは実際の業務システムではあまりないと思われるが、参考までに漢字についても併記しておく)。

\p{IsHiragana}
\p{IsKatakana}
\p{IsCJKUnifiedIdeographs}

 これらの正規表現はブロック名が示す範囲に含まれる文字と一致する。よって、例えばひらがなだけからなる文字列と一致する正規表現は次のようになる。

^\p{IsHiragana}*$

 ここで、“^”は行頭、“$”は行末にマッチし、“*”は直前の要素の0個以上の繰り返しにマッチする。正規表現とそのプログラミングについては「スマートな文字列処理のための正規表現入門」で解説されているのでそちらを参考にしていただきたい。

Regex.IsMatchメソッドによる文字列のマッチ

 さて、ある文字列が渡されたとき、それが特定の正規表現にマッチするかどうかを調べるには、Regexクラス(System.Text.RegularExpressions名前空間)のIsMatchメソッドが利用できる。このstaticなメソッドを使用すると、文字列strがひらがなかどうかは次のようなコードで記述することができる。

bool isHiragana = Regex.IsMatch(str, @"^\p{IsHiragana}*$");

 IsMatchメソッドは文字列と正規表現がマッチした場合にはtrue、さもなければfalseを返す。

 次のサンプル・プログラムは、ひらがなとカタカナのチェックを行っているコード例である。

// iskana.cs

using System;
using System.Text.RegularExpressions;

public class StringChecker {

  static bool IsHiragana(string str) {
    return Regex.IsMatch(str, @"^\p{IsHiragana}*$");
  }

  static bool IsKatakana(string str) {
    return Regex.IsMatch(str, @"^\p{IsKatakana}*$");
  }

  static void Main() {

    string hiragana = "こんにちは";
    string katakana = "コンニチハ";
    string kanji    = "今日は";

    Console.WriteLine(IsHiragana(hiragana)); // 出力:True
    Console.WriteLine(IsHiragana(katakana)); // 出力:False
    Console.WriteLine(IsHiragana(kanji));    // 出力:False

    Console.WriteLine(IsKatakana(hiragana)); // 出力:False
    Console.WriteLine(IsKatakana(katakana)); // 出力:True
    Console.WriteLine(IsKatakana(kanji));    // 出力:False
  }
}

// コンパイル方法:csc iskana.cs

ひらがなとカタカナのチェックを行うC#のサンプル・プログラム(iskana.cs)

ブロックに含まれる文字

 “\p{IsHiragana}”などは、単に文字コードの範囲指定を文字列に置き換えているだけなので、

[\u3040-\u309F]

といった文字コードによる正規表現でも同じ内容を示すことができる(「\u+16進数」はUnicode文字と一致する)。

 Unicode文字を示す文字コードは、Windowsに標準で付属する「文字コード表」により確認することができる。このアプリケーションを起動し、[フォント]ドロップダウン・リストボックスで「MSゴシック」などを選択してから文字をマウスで選択すれば、その文字コードが画面一番下のステータス・バー部分に表示される。

Windowsに標準で付属する「文字コード表」アプリケーション
このアプリケーションを使用すれば、Unicode文字の文字コードを知ることができる。
  日本語のフォントである「MSゴシック」などを選択する。
  “\p{IsHiragana}”が表す文字の範囲。

 これによれば、“ぁ”(\u3041)から“ゞ”(\u309E)までが、“\p{IsHiragana}”によりカバーされる文字なので、

[ぁ-ゞ]

と記述しても、ほぼ同等な正規表現となる。各文字ブロックの範囲に含まれる文字を正確に知りたい場合には、UTCにあるCode Chartsを参照していただきたい。End of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Regexクラス(System.Text.RegularExpressions名前空間)
 
この記事と関連性の高い別の.NET TIPS
文字列を1文字ずつ解析するには?(サロゲート文字対応)
正規表現を使って部分文字列を取得するには?
全角英数字のみを半角に変換するには?
文字と文字列を変換するには?
文字列をひらがな/カタカナに変換するには?(VB.NET関数活用)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH