DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

正規表現を使って文字列がある形式と一致するか調べる

補足:ここでは正規表現の説明はしません。.NET Frameworkの正規表現の基本は、「正規表現の基本」で説明しています。
補足:「正規表現テストツール」を使って正規表現のテストを行うことができますので、お役立てください。

指定された正規表現のパターンと一致する対象が入力文字列内で見つかるかどうかを調べるには、RegexクラスのIsMatchメソッドを使用します。ここではIsMatchメソッドを使った例を幾つか紹介します。なお、正規表現のパターンと一致する個所を探し、見つかったらその箇所を抽出する方法は、「正規表現を使って文字列を検索し、抽出する」で紹介しています。

郵便番号か調べる

次の例では、TextBox1に入力された文字列が郵便番号っぽいか(「"数字3文字"-"数字4文字"」形式になっているか)調べています。RegexOptions.ECMAScriptを指定しているのは、\d が半角の数字だけにマッチするようにするためです。

VB.NET
コードを隠すコードを選択
'郵便番号っぽいか調べる 
'パターンは"\d{3}-\d{4}"とも書ける 
If System.Text.RegularExpressions.Regex.IsMatch( _
    TextBox1.Text, _
    "^\d\d\d-\d\d\d\d$", _
    System.Text.RegularExpressions.RegexOptions.ECMAScript) Then

    Console.WriteLine("郵便番号です")
End If
C#
コードを隠すコードを選択
//郵便番号っぽいか調べる
//パターンは"\d{3}-\d{4}"とも書ける
if (System.Text.RegularExpressions.Regex.IsMatch(
    TextBox1.Text,
    @"^\d\d\d-\d\d\d\d$",
    System.Text.RegularExpressions.RegexOptions.ECMAScript))
{
    Console.WriteLine("郵便番号です");
}

半角カナ文字が含まれているか調べる

次の例ではTextBox1に入力された文字列内に半角カナ文字(Halfwidth CJK punctuationとHalfwidth Katakana variants)があるか調べています。上記の例では静的メソッドのIsMatchを使用しましたが、ここではインスタンスメソッドを使用しています。

VB.NET
コードを隠すコードを選択
'正規表現パターンを指定してRegexオブジェクトを作成 
Dim r As New System.Text.RegularExpressions.Regex("[\uFF61-\uFF9F]")

'半角カナ文字が含まれているか調べる 
If r.IsMatch(TextBox1.Text) Then
    Console.WriteLine("半角カナ文字が含まれています")
End If
C#
コードを隠すコードを選択
//正規表現パターンを指定してRegexオブジェクトを作成
System.Text.RegularExpressions.Regex r =
    new System.Text.RegularExpressions.Regex(
        @"[\uFF61-\uFF9F]");

//半角カナ文字が含まれているか調べる
if (r.IsMatch(TextBox1.Text))
{
    Console.WriteLine("半角カナ文字が含まれています");
}

メールアドレスか調べる

次の例ではTextBox1に入力された文字列がメールアドレスっぽいか調べています。ここで使用している正規表現パターンは、「Regular-Expressions.info」で紹介されているものです。また、MSDNの「方法 : 文字列が有効な電子メール形式であるかどうかを検証する」では別のパターンが紹介されています。

VB.NET
コードを隠すコードを選択
'メールアドレスっぽいか調べる 
If System.Text.RegularExpressions.Regex.IsMatch( _
    TextBox1.Text, _
    "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", _
    System.Text.RegularExpressions.RegexOptions.IgnoreCase) Then

    Console.WriteLine("メールアドレスのようです")
End If
C#
コードを隠すコードを選択
//メールアドレスっぽいか調べる
if (System.Text.RegularExpressions.Regex.IsMatch(
    TextBox1.Text,
    @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
    Console.WriteLine("メールアドレスのようです");
}

URLか調べる

次の例ではTextBox1に入力された文字列がURL(HTTP)っぽいか調べています。なおこの正規表現パターンは、「Perlメモ」で紹介されているものです。

VB.NET
コードを隠すコードを選択
'URLっぽいか調べる 
If System.Text.RegularExpressions.Regex.IsMatch( _
    TextBox1.Text, _
    "^s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+$") Then

    Console.WriteLine("URLのようです")
End If
C#
コードを隠すコードを選択
//URLっぽいか調べる
if (System.Text.RegularExpressions.Regex.IsMatch(
    TextBox1.Text,
    @"^s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+$"))
{
    Console.WriteLine("URLのようです");
}

電話番号か調べる

次の例ではTextBox1に入力された文字列が(日本国内の)電話番号っぽいかをおおざっぱに調べています。「電話番号に関するQ&A」を参考にしました。

VB.NET
コードを隠すコードを選択
'電話番号っぽいか調べる 
If System.Text.RegularExpressions.Regex.IsMatch( _
    TextBox1.Text, _
    "^0\d{1,4}-\d{1,4}-\d{4}$") Then

    Console.WriteLine("電話番号のようです")
End If
C#
コードを隠すコードを選択
//電話番号っぽいか調べる
if (System.Text.RegularExpressions.Regex.IsMatch(
    TextBox1.Text,
    @"^0\d{1,4}-\d{1,4}-\d{4}$"))
{
    Console.WriteLine("電話番号のようです");
}