【C#】文字列が正規表現パターンに一致するか判定する (Regex.IsMatch)

ユーザーが入力したデータが正しい形式になっているか(例:郵便番号、電話番号、メールアドレスなど)をチェックする際、正規表現(Regular Expressions) は非常に強力なツールです。

C#では System.Text.RegularExpressions 名前空間の Regex.IsMatch メソッドを使用することで、対象の文字列が特定のパターンに一致するかどうかを簡単に true / false で判定できます。

目次

郵便番号の形式チェックの実装

以下のサンプルコードでは、日本の郵便番号形式(3桁の数字 - 4桁の数字)に完全に一致するかどうかを判定しています。

サンプルコード

using System;
using System.Text.RegularExpressions; // 正規表現機能を使用するために必要

public class Program
{
    public static void Main()
    {
        // チェック対象の文字列リスト
        string[] inputs = new string[]
        {
            "100-0001",   // 正しい形式
            "1234567",    // ハイフンがない
            "123-45ab",   // 数字以外が含まれている
            "99-99999",   // 桁数が違う
            "text 123-4567 end" // 形式は含むが、余計な文字がある
        };

        // 正規表現パターン: 
        // ^     : 行の先頭
        // \d{3} : 数字が3回
        // -     : ハイフン
        // \d{4} : 数字が4回
        // $     : 行の末尾
        string pattern = @"^\d{3}-\d{4}$";

        Console.WriteLine($"パターン: {pattern}\n");

        foreach (var text in inputs)
        {
            // Regex.IsMatch(対象文字列, パターン)
            // 一致すれば true, しなければ false を返す
            bool isMatch = Regex.IsMatch(text, pattern);

            string result = isMatch ? "〇 一致" : "× 不一致";
            Console.WriteLine($"{text,-15} => {result}");
        }
    }
}

実行結果

パターン: ^\d{3}-\d{4}$

100-0001        => 〇 一致
1234567         => × 不一致
123-45ab        => × 不一致
99-99999        => × 不一致
text 123-4567 end => × 不一致

解説と技術的なポイント

1. Regex.IsMatch メソッド

静的メソッド Regex.IsMatch(input, pattern) は、第一引数の文字列が、第二引数の正規表現パターンにマッチするかどうかを判定します。戻り値は bool です。 ※ 繰り返し同じパターンを使う場合は、インスタンスを生成する方法もありますが、単発のチェックならこの静的メソッドが手軽です。

2. 逐語的文字列リテラル (@)

正規表現パターンを文字列として定義する際、先頭に @ を付ける(@"...")ことを推奨します。 通常の文字列ではバックスラッシュ \ がエスケープ文字として扱われるため、正規表現の \d(数字)などを記述する際に \\d と重ねて書く必要がありますが、@ を使えば \d とそのまま記述でき、可読性が向上します。

3. 先頭(^) と 末尾($) の重要性

バリデーション(入力チェック)を行う場合、行頭を表す ^ と、行末を表す $ をパターンに含めることが非常に重要です。

  • ^\d{3}-\d{4}$: 「123-4567」だけの場合に一致します。
  • \d{3}-\d{4} (アンカーなし): 文字列のどこかにそのパターンがあれば一致とみなすため、「住所は100-0001です」のような文章も true になってしまいます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次