.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を返す。
次のサンプル・プログラムは、ひらがなとカタカナのチェックを行っているコード例である。
|
|
ひらがなとカタカナのチェックを行うC#のサンプル・プログラム(iskana.cs) | |
ブロックに含まれる文字
“\p{IsHiragana}”などは、単に文字コードの範囲指定を文字列に置き換えているだけなので、
[\u3040-\u309F]
といった文字コードによる正規表現でも同じ内容を示すことができる(「\u+16進数」はUnicode文字と一致する)。
Unicode文字を示す文字コードは、Windowsに標準で付属する「文字コード表」により確認することができる。このアプリケーションを起動し、[フォント]ドロップダウン・リストボックスで「MSゴシック」などを選択してから文字をマウスで選択すれば、その文字コードが画面一番下のステータス・バー部分に表示される。
![]() |
||||||
Windowsに標準で付属する「文字コード表」アプリケーション | ||||||
このアプリケーションを使用すれば、Unicode文字の文字コードを知ることができる。 | ||||||
|
これによれば、“ぁ”(\u3041)から“ゞ”(\u309E)までが、“\p{IsHiragana}”によりカバーされる文字なので、
[ぁ-ゞ]
と記述しても、ほぼ同等な正規表現となる。各文字ブロックの範囲に含まれる文字を正確に知りたい場合には、UTCにあるCode Chartsを参照していただきたい。
カテゴリ:クラス・ライブラリ 処理対象:文字列 使用ライブラリ:Regexクラス(System.Text.RegularExpressions名前空間) |
|
![]() |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
||
|
||
![]() |