ここでは、指定された文字がひらがなか、カタカナか、漢字か、数字か、英字(アルファベット、ラテン文字の基本字)かを調べる方法を紹介します。
ユニコードでひらがなは、U+3041の「ぁ」からU+309Fの「ゟ」(より)までの範囲にあります(コード表)。よってこの範囲内にある文字はひらがなと判断できます。
ただしこの範囲にはU+30FCの「ー」(長音記号)とU+30A0の「゠」(ダブルハイフン)が含まれていませんので、これをひらがなと判断したい場合は気をつけてください。
実はこの他にも、Kana Supplement(コード表)内のU+1B001に「ヤ行エ」というひらがなもあるのですが、ここでは無視します。
指定した文字がひらがなかを判断するメソッドの例を示します。
''' <summary> ''' 指定した Unicode 文字が、ひらがなかどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c がひらがなである場合は true。それ以外の場合は false。</returns> Public Shared Function IsHiragana(ByVal c As Char) As Boolean '「ぁ」~「より」までと、「ー」「ダブルハイフン」をひらがなとする Return (ChrW(&H3041) <= c AndAlso c <= ChrW(&H309F)) _ OrElse c = ChrW(&H30FC) OrElse c = ChrW(&H30A0) End Function
/// <summary> /// 指定した Unicode 文字が、ひらがなかどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c がひらがなである場合は true。それ以外の場合は false。</returns> public static bool IsHiragana(char c) { //「ぁ」~「より」までと、「ー」「ダブルハイフン」をひらがなとする return ('\u3041' <= c && c <= '\u309F') || c == '\u30FC' || c == '\u30A0'; }
このメソッドを用いて、ある文字列に含まれている文字がすべてひらがなかを調べるメソッドの例を示します。
''' <summary> ''' 指定した文字列に含まれる文字がすべてひらがなかどうかを示します。 ''' </summary> ''' <param name="s">評価する文字列。</param> ''' <returns>c に含まれる文字がすべてひらがなである場合は true。 ''' それ以外の場合は false。</returns> Public Shared Function IsHiragana(ByVal s As String) As Boolean If s Is Nothing Then Throw New ArgumentNullException("s") End If For Each c As Char In s If Not IsHiragana(c) Then 'ひらがなでない文字が含まれているとき Return False End If Next Return True End Function
/// <summary> /// 指定した文字列に含まれる文字がすべてひらがなかどうかを示します。 /// </summary> /// <param name="s">評価する文字列。</param> /// <returns>c に含まれる文字がすべてひらがなである場合は true。 /// それ以外の場合は false。</returns> public static bool IsHiragana(string s) { if (s == null) { throw new ArgumentNullException("s"); } foreach (char c in s) { if (!IsHiragana(c)) { //ひらがなでない文字が含まれているとき return false; } } return true; }
次に正規表現を使った方法を紹介します。しかし正規表現についての説明はしませんので、分からないという方は、まず「正規表現の基本」をご覧ください。
U+3040からU+309Fまでは「Hiragana」というブロック名が付いています。よって任意のひらがな1文字を表す正規表現パターンとして、「\p{IsHiragana}」が使えます。ただし、先述したように、「\p{IsHiragana}」には長音記号とダブルハイフンは一致しません。もしこれらもひらがなとするならば、ひらがな1文字を表す正規表現パターンは、「[\p{IsHiragana}\u30FC\u30A0]」や「[\u3040-\u309F\u30FC\u30A0]」のようになります。
以下に、指定された文字列に含まれる文字がすべてひらがなかを調べる例を示します。
Dim s As String = "きょうはいいてんきです" 'sに含まれる文字がすべてひらがなか調べる 'sが空の文字列の時は、falseを返す If System.Text.RegularExpressions.Regex.IsMatch(s, "^\p{IsHiragana}+$") Then Console.WriteLine("すべてひらがなです。") Else Console.WriteLine("ひらがな以外の文字が含まれています。") End If
string s = "きょうはいいてんきです"; //sに含まれる文字がすべてひらがなか調べる //sが空の文字列の時は、falseを返す if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^\p{IsHiragana}+$")) { Console.WriteLine("すべてひらがなです。"); } else { Console.WriteLine("ひらがな以外の文字が含まれています。"); }
全角カタカナは、U+30A0の「゠」(ダブルハイフン)からU+30FFの「ヿ」(コト)までの範囲にあります(コード表)。もしダブルハイフンを除外したいならば、U+30A1の「ァ」からの範囲になります。
ただしこの範囲には、U+30FBの「・」(中黒、中点)とU+30FCの「ー」(長音記号)が含まれています。また、U+3099からU+309Cまでの濁点と半濁点は含まれていません。
全角カタカナはこの他に、U+31F0からU+31FFまでのKatakana Phonetic Extensions(カタカナフリガナ拡張)(コード表)にもあります。さらには、U+1B000の「ア行エ」もありますが、これはここでは無視します。
指定した文字が全角カタカナかどうかを判別するメソッドの例を示します。
''' <summary> ''' 指定した Unicode 文字が、全角カタカナかどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c が全角カタカナである場合は true。それ以外の場合は false。</returns> Public Shared Function IsFullwidthKatakana(ByVal c As Char) As Boolean '「ダブルハイフン」から「コト」までと、カタカナフリガナ拡張と、 '濁点と半濁点を全角カタカナとする '中点と長音記号も含む Return (ChrW(&H30A0) <= c AndAlso c <= ChrW(&H30FF)) OrElse _ (ChrW(&H31F0) <= c AndAlso c <= ChrW(&H31FF)) OrElse _ (ChrW(&H3099) <= c AndAlso c <= ChrW(&H309C)) End Function
/// <summary> /// 指定した Unicode 文字が、全角カタカナかどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c が全角カタカナである場合は true。それ以外の場合は false。</returns> public static bool IsFullwidthKatakana(char c) { //「ダブルハイフン」から「コト」までと、カタカナフリガナ拡張と、 //濁点と半濁点を全角カタカナとする //中点と長音記号も含む return ('\u30A0' <= c && c <= '\u30FF') || ('\u31F0' <= c && c <= '\u31FF') || ('\u3099' <= c && c <= '\u309C'); }
半角カタカナは、U+FF65の「・」(半角カタカナ中点)からU+FF9Fの「゚」までの範囲にあります(コード表)。ただし半角カタカナ中点を含めない場合は、U+FF66の「ヲ」からになります。
指定した文字が半角カタカナかどうかを判別するメソッドの例を示します。
''' <summary> ''' 指定した Unicode 文字が、半角カタカナかどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c が半角カタカナである場合は true。それ以外の場合は false。</returns> Public Shared Function IsHalfwidthKatakana(ByVal c As Char) As Boolean '「・」から「゚」までを半角カタカナとする Return ChrW(&HFF65) <= c AndAlso c <= ChrW(&HFF9F) End Function
/// <summary> /// 指定した Unicode 文字が、半角カタカナかどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c が半角カタカナである場合は true。それ以外の場合は false。</returns> public static bool IsHalfwidthKatakana(char c) { //「・」から「゚」までを半角カタカナとする return '\uFF65' <= c && c <= '\uFF9F'; }
以上2つをまとめて、指定した文字がカタカナかどうかを判別するメソッドは以下のようになります。
''' <summary> ''' 指定した Unicode 文字が、カタカナかどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c がカタカナである場合は true。それ以外の場合は false。</returns> Public Shared Function IsKatakana(ByVal c As Char) As Boolean '「ダブルハイフン」から「コト」までと、カタカナフリガナ拡張と、 '濁点と半濁点と、半角カタカナをカタカナとする '中点と長音記号も含む Return (ChrW(&H30A0) <= c AndAlso c <= ChrW(&H30FF)) OrElse _ (ChrW(&H31F0) <= c AndAlso c <= ChrW(&H31FF)) OrElse _ (ChrW(&H3099) <= c AndAlso c <= ChrW(&H309C)) OrElse _ (ChrW(&HFF65) <= c AndAlso c <= ChrW(&HFF9F)) End Function
/// <summary> /// 指定した Unicode 文字が、カタカナかどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c がカタカナである場合は true。それ以外の場合は false。</returns> public static bool IsKatakana(char c) { //「ダブルハイフン」から「コト」までと、カタカナフリガナ拡張と、 //濁点と半濁点と、半角カタカナをカタカナとする //中点と長音記号も含む return ('\u30A0' <= c && c <= '\u30FF') || ('\u31F0' <= c && c <= '\u31FF') || ('\u3099' <= c && c <= '\u309C') || ('\uFF65' <= c && c <= '\uFF9F'); }
U+30A0からU+30FFまでは「Katakana」というブロック名が付いています。しかし、カタカナフリガナ拡張や半角カタカナの範囲を表すブロック名はありません。
以下に、指定された文字列に含まれる文字がすべてカタカナ(全角カタカナ、カタカナフリガナ拡張、濁点と半濁点、半角カタカナ)かを調べる例を示します。ひらがなの例とほぼ同じですので、説明はしません。
Dim s As String = "カタカナカタカナ" '通常の全角カタカナの他に、カタカナフリガナ拡張、 ' 濁点と半濁点、半角カタカナもカタカナとする If System.Text.RegularExpressions.Regex.IsMatch(s, _ "^[\p{IsKatakana}\u31F0-\u31FF\u3099-\u309C\uFF65-\uFF9F]+$") Then Console.WriteLine("すべてカタカナです。") Else Console.WriteLine("カタカナ以外の文字が含まれています。") End If
string s = "カタカナカタカナ"; //通常の全角カタカナの他に、カタカナフリガナ拡張、 // 濁点と半濁点、半角カタカナもカタカナとする if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^[\p{IsKatakana}\u31F0-\u31FF\u3099-\u309C\uFF65-\uFF9F]+$")) { Console.WriteLine("すべてカタカナです。"); } else { Console.WriteLine("カタカナ以外の文字が含まれています。"); }
指定された文字が日本語で使われる漢字かどうかを調べることは非常に難しいため、ここではそこまでは考えません。
ユニコードのCJK Unified Ideographs(CJK統合漢字)ブロックのU+4E00からU+9FCFまでのの範囲に、ほとんどの漢字は入っています(コード表)。ただし、日本語以外の文字も含まれています。
さらに、U+F900からU+FAFFまでのCJK Compatibility Ideographs(CJK互換漢字)(コード表)、U+3400からU+4DBFまでのCJK Unified Ideographs Extension A(CJK統合漢字拡張A)(コード表)、U+20000からU+2A6DFまでのCJK Unified Ideographs Extension B(CJK統合漢字拡張B)(コード表)、U+2A700からU+2B73FまでのCJK Unified Ideographs Extension C(CJK統合漢字拡張C)(コード表)、U+2B740からU+2B81FまでのCJK Unified Ideographs Extension D(CJK統合漢字拡張D)(コード表)、U+2F800からU+2FA1FまでのCJK Compatibility Ideographs Supplement(CJK互換漢字補助)(コード表)にも漢字があります。
Wikipediaによると、JIS X 0208の漢字は、ユニコードの基本多言語面のいずれかの符号位置に対応するそうです。つまり、CJK統合漢字、CJK互換漢字、CJK統合漢字拡張Aにすべて含まれていることになります。また、JIS X 0213の漢字は、基本多言語面の他に、サロゲートペアのCJK統合漢字拡張Bにもあるそうです。
指定された文字がCJK統合漢字、CJK互換漢字、CJK統合漢字拡張Aの範囲にあるか調べるメソッドの例を示します。
''' <summary> ''' 指定した Unicode 文字が、漢字かどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c が漢字である場合は true。それ以外の場合は false。</returns> Public Shared Function IsKanji(ByVal c As Char) As Boolean 'CJK統合漢字、CJK互換漢字、CJK統合漢字拡張Aの範囲にあるか調べる Return (ChrW(&H4E00) <= c AndAlso c <= ChrW(&H9FCF)) OrElse _ (ChrW(&HF900) <= c AndAlso c <= ChrW(&HFAFF)) OrElse _ (ChrW(&H3400) <= c AndAlso c <= ChrW(&H4DBF)) End Function
/// <summary> /// 指定した Unicode 文字が、漢字かどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c が漢字である場合は true。それ以外の場合は false。</returns> public static bool IsKanji(char c) { //CJK統合漢字、CJK互換漢字、CJK統合漢字拡張Aの範囲にあるか調べる return ('\u4E00' <= c && c <= '\u9FCF') || ('\uF900' <= c && c <= '\uFAFF') || ('\u3400' <= c && c <= '\u4DBF'); }
次に、CJK統合漢字拡張Bまで調べるメソッドの例を示します。
''' <summary> ''' 指定した文字列の指定位置にある文字が漢字かどうかを示します。 ''' </summary> ''' <param name="s">文字列</param> ''' <param name="index">s 内の評価する文字の位置。</param> ''' <returns>s の index の位置にある文字が漢字の場合は true。 ''' それ以外の場合は false。</returns> Public Shared Function IsKanji(ByVal s As String, ByVal index As Integer) As Boolean If s Is Nothing Then Throw New ArgumentNullException("s") End If If s.Length <= index Then Throw New ArgumentException("index が s 内にない位置です。") End If Dim c1 As Char = s.Chars(index) If Char.IsHighSurrogate(c1) Then If s.Length - 1 <= index Then Return False End If Dim c2 As Char = s.Chars(index + 1) 'CJK統合漢字拡張Bの範囲にあるか調べる Return ((ChrW(&HD840) <= c1 AndAlso c1 < ChrW(&HD869)) AndAlso _ Char.IsLowSurrogate(c2)) OrElse _ (c1 = ChrW(&HD869) AndAlso (ChrW(&HDC00) <= c2 AndAlso c2 <= ChrW(&HDEDF))) Else 'CJK統合漢字、CJK互換漢字、CJK統合漢字拡張Aの範囲にあるか調べる Return (ChrW(&H4E00) <= c1 AndAlso c1 <= ChrW(&H9FCF)) OrElse _ (ChrW(&HF900) <= c1 AndAlso c1 <= ChrW(&HFAFF)) OrElse _ (ChrW(&H3400) <= c1 AndAlso c1 <= ChrW(&H4DBF)) End If End Function
/// <summary> /// 指定した文字列の指定位置にある文字が漢字かどうかを示します。 /// </summary> /// <param name="s">文字列</param> /// <param name="index">s 内の評価する文字の位置。</param> /// <returns>s の index の位置にある文字が漢字の場合は true。 /// それ以外の場合は false。</returns> public static bool IsKanji(string s, int index) { if (s == null) { throw new ArgumentNullException("s"); } if (s.Length <= index) { throw new ArgumentException("index が s 内にない位置です。"); } char c1 = s[index]; if (char.IsHighSurrogate(c1)) { if (s.Length - 1 <= index) { return false; } char c2 = s[index + 1]; //CJK統合漢字拡張Bの範囲にあるか調べる return (('\uD840' <= c1 && c1 < '\uD869') && char.IsLowSurrogate(c2)) || (c1 == '\uD869' && ('\uDC00' <= c2 && c2 <= '\uDEDF')); } else { //CJK統合漢字、CJK互換漢字、CJK統合漢字拡張Aの範囲にあるか調べる return ('\u4E00' <= c1 && c1 <= '\u9FCF') || ('\uF900' <= c1 && c1 <= '\uFAFF') || ('\u3400' <= c1 && c1 <= '\u4DBF'); } }
正規表現を使って、指定した文字列の中に漢字が含まれているか調べる例を示します。CJK統合漢字、CJK互換漢字、CJK統合漢字拡張A、CJK統合漢字拡張Bの範囲にあるかを調べています。
Dim s As String = "今日もいい天気です。" '漢字が含まれているか調べる If System.Text.RegularExpressions.Regex.IsMatch(s, _ "[\p{IsCJKUnifiedIdeographs}" & _ "\p{IsCJKCompatibilityIdeographs}" & _ "\p{IsCJKUnifiedIdeographsExtensionA}]|" & _ "[\uD840-\uD869][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]") Then Console.WriteLine("漢字が含まれています。") End If Console.ReadLine()
string s = "今日もいい天気です。"; //漢字が含まれているか調べる if (System.Text.RegularExpressions.Regex.IsMatch(s, @"[\p{IsCJKUnifiedIdeographs}" + @"\p{IsCJKCompatibilityIdeographs}" + @"\p{IsCJKUnifiedIdeographsExtensionA}]|" + @"[\uD840-\uD869][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]")) { Console.WriteLine("漢字が含まれています。"); }
指定した文字が十進数の数字かどうかを調べるには、Char.IsDigitメソッドを使います。Char.IsDigitメソッドがTrueを返す文字は、ユニコードのカテゴリで「Nd」(Number, Decimal Digit)に分類される文字です。この中には、「0」から「9」の半角数字、「0」から「9」の全角数字の他に、様々な言語の数字や、数学で使用する数字など、たくさんの文字があります。具体的な文字のリストは、「Unicode Characters in the 'Number, Decimal Digit' Category」にあります。
Char構造体には、Char.IsNumberメソッドもあります。このメソッドがTrueを返す文字は、ユニコードのカテゴリで「N」(Number)に分類される文字です。このカテゴリには、「Nd」の他に、「Nl」(Number, Letter)と「No」(Number, Other)のカテゴリも含まれています。「Nd」にはローマ数字などが、「No」には丸の中に数字が入った文字などが含まれています。具体的な文字のリストは、「Unicode Characters in the 'Number, Letter' Category」と「Unicode Characters in the 'Number, Other' Category」をご覧ください。
以下にこれらのメソッドを使った例を示します。
'----- Char.IsDigit ----- '半角数字 Dim b1 As Boolean = Char.IsDigit("1"c) 'True '全角数字 Dim b2 As Boolean = Char.IsDigit("1"c) 'True '漢数字 Dim b3 As Boolean = Char.IsDigit("一"c) 'False '丸数字 Dim b4 As Boolean = Char.IsDigit("①"c) 'False '----- Char.IsNumber ----- '半角数字 Dim b6 As Boolean = Char.IsNumber("1"c) 'True '全角数字 Dim b7 As Boolean = Char.IsNumber("1"c) 'True '漢数字 Dim b8 As Boolean = Char.IsNumber("一"c) 'False '丸数字 Dim b9 As Boolean = Char.IsNumber("①"c) 'True
//----- Char.IsDigit ----- //半角数字 bool b1 = char.IsDigit('1'); //True //全角数字 bool b2 = char.IsDigit('1'); //True //漢数字 bool b3 = char.IsDigit('一'); //False //丸数字 bool b4 = char.IsDigit('①'); //False //----- Char.IsNumber ----- //半角数字 bool b6 = char.IsNumber('1'); //True //全角数字 bool b7 = char.IsNumber('1'); //True //漢数字 bool b8 = char.IsNumber('一'); //False //丸数字 bool b9 = char.IsNumber('①'); //True
半角のアラビア数字(ASCII digits)は、「0」のU+0030から「9」のU+0039までの範囲にあります。また、全角のアラビア数字は、「0」のU+FF10から「9」のU+FF19までの範囲にあります。
よって、「0」から「9」、または「0」から「9」までの文字かを調べるには、次のようにします。
''' <summary> ''' 指定した Unicode 文字が、0 から 9 までの数字かどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c が数字である場合は true。それ以外の場合は false。</returns> Public Shared Function IsAsciiDigit(ByVal c As Char) As Boolean Return "0"c <= c AndAlso c <= "9"c End Function ''' <summary> ''' 指定した Unicode 文字が、0 から 9 までの数字かどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c が数字である場合は true。それ以外の場合は false。</returns> Public Shared Function IsFullwidthDigit(ByVal c As Char) As Boolean Return "0"c <= c AndAlso c <= "9"c End Function
/// <summary> /// 指定した Unicode 文字が、0 から 9 までの数字かどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c が数字である場合は true。それ以外の場合は false。</returns> public static bool IsAsciiDigit(char c) { return '0' <= c && c <= '9'; } /// <summary> /// 指定した Unicode 文字が、0 から 9 までの数字かどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c が数字である場合は true。それ以外の場合は false。</returns> public static bool IsFullwidthDigit(char c) { return '0' <= c && c <= '9'; }
正規表現では、「\d」は数字と一致します。「正規表現の基本」でも説明していますが、.NET Frameworkでは「\d」は「\p{Nd}」と同じですので、「Number, Decimal Digit」に分類されているすべての文字が一致します。もしJavaScriptなどと同じように「\d」が0から9までの半角の数字のみと一致するようにするには、RegexOptions.ECMAScriptオプションを指定するか、「\d」の代わりに「[0-9]」を使うようにします。
以下に正規表現を使った例を幾つか示します。
Dim s As String = "123456789" 'Char.IsDigitがTrueを返す文字だけが含まれているか調べる If System.Text.RegularExpressions.Regex.IsMatch(s, "^\d+$") Then Console.WriteLine("すべて Number, Decimal Digit です。") End If 'Char.IsNumberがTrueを返す文字だけが含まれているか調べる If System.Text.RegularExpressions.Regex.IsMatch(s, "^\p{N}+$") Then Console.WriteLine("すべて Number です。") End If '半角のアラビア数字だけが含まれているか調べる If System.Text.RegularExpressions.Regex.IsMatch(s, "^[0-9]+$") Then Console.WriteLine("すべて半角のアラビア数字です。") End If
string s = "123456789"; //Char.IsDigitがTrueを返す文字だけが含まれているか調べる if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^\d+$")) { Console.WriteLine("すべて Number, Decimal Digit です。"); } //Char.IsNumberがTrueを返す文字だけが含まれているか調べる if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^\p{N}+$")) { Console.WriteLine("すべて Number です。"); } //半角のアラビア数字だけが含まれているか調べる if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^[0-9]+$")) { Console.WriteLine("すべて半角のアラビア数字です。"); }
半角の英字(アルファベット、ラテン文字の基本字)は、大文字(Uppercase Latin alphabet)が「A」のU+0041から「Z」のU+005Aまでの範囲に、小文字(Lowercase Latin alphabet)が「a」のU+0061から「z」のU+007Aまでの範囲にあります。
全角の英字は、大文字が「A」のU+FF21から「Z」のU+FF3Aまでの範囲に、小文字が「a」のU+FF41から「z」のU+FF5Aまでの範囲にあります。
以下に、指定した文字が英字の大文字か、小文字かを調べるメソッドの例を示します。
''' <summary> ''' 指定した Unicode 文字が、英字の大文字かどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c が英字の大文字である場合は true。 ''' それ以外の場合は false。</returns> Public Shared Function IsUpperLatin(ByVal c As Char) As Boolean '半角英字と全角英字の大文字の時はTrue Return ("A"c <= c AndAlso c <= "Z"c) OrElse ("A"c <= c AndAlso c <= "Z"c) End Function ''' <summary> ''' 指定した Unicode 文字が、英字の小文字かどうかを示します。 ''' </summary> ''' <param name="c">評価する Unicode 文字。</param> ''' <returns>c が英字の小文字である場合は true。 ''' それ以外の場合は false。</returns> Public Shared Function IsLowerLatin(ByVal c As Char) As Boolean '半角英字と全角英字の小文字の時はTrue Return ("a"c <= c AndAlso c <= "z"c) OrElse ("a"c <= c AndAlso c <= "z"c) End Function
/// <summary> /// 指定した Unicode 文字が、英字の大文字かどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c が英字の大文字である場合は true。 /// それ以外の場合は false。</returns> public static bool IsUpperLatin(char c) { //半角英字と全角英字の大文字の時はTrue return ('A' <= c && c <= 'Z') || ('A' <= c && c <= 'Z'); } /// <summary> /// 指定した Unicode 文字が、英字の小文字かどうかを示します。 /// </summary> /// <param name="c">評価する Unicode 文字。</param> /// <returns>c が英字の小文字である場合は true。 /// それ以外の場合は false。</returns> public static bool IsLowerLatin(char c) { //半角英字と全角英字の小文字の時はTrue return ('a' <= c && c <= 'z') || ('a' <= c && c <= 'z'); }
Char構造体には、Char.IsUpperとChar.IsLowerメソッドというものがあります。これらのメソッドでも指定した文字が大文字か小文字かを調べることができます。これらのメソッドがTrueを返す文字は、それぞれ、ユニコードのカテゴリで「Lu」(Letters, uppercase)に分類される文字と、「Ll」(Letters, lowercase)に分類される文字です。よってラテン文字だけでなく、多くの文字に対応しています。具体的にどのような文字があるかは、「Unicode Characters in the 'Letter, Lowercase' Category」と「Unicode Characters in the 'Letter, Uppercase' Category」をご覧ください。
くどくなりますので説明はしませんが、以下に正規表現を使った例を示します。
Dim s As String = "DobonDotNet" '半角アルファベットだけが含まれているか調べる If System.Text.RegularExpressions.Regex.IsMatch(s, "^[a-zA-Z]+$") Then Console.WriteLine("すべて 半角アルファベット です。") End If '全角アルファベットだけが含まれているか調べる If System.Text.RegularExpressions.Regex.IsMatch(s, "^[a-zA-Z]+$") Then Console.WriteLine("すべて 全角アルファベット です。") End If
string s = "DobonDotNet"; //半角アルファベットだけが含まれているか調べる if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^[a-zA-Z]+$")) { Console.WriteLine("すべて 半角アルファベット です。"); } //全角アルファベットだけが含まれているか調べる if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^[a-zA-Z]+$")) { Console.WriteLine("すべて 全角アルファベット です。"); }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。