【C#】正規表現を使ってCSVファイルから無効なメールアドレスを探す

C#

このサンプルでは、指定されたCSVファイルを読み込み、無効なメールアドレスを検出し、コンソールに出力します。

入力ファイルと出力例

入力ファイル:file.csv

name,email,age
John Doe,johndoe@example.com,30
Jane Smith,janesmith@invalid,25
Bob Johnson,bobjohnson@example.com,40
Alice Brown,alicebrown@example,35

実行結果

file.csv(3): janesmith@invalid
file.csv(5): alicebrown@example

サンプルコード

このサンプルコードは、CSVファイルを読み込み、各行のフィールドをチェックして無効なメールアドレスを検出します。

using System;
using System.IO;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        string csvFilePath = @"C:\path\to\your\file.csv"; // CSVファイルのパス

        try
        {
            using (StreamReader reader = new StreamReader(csvFilePath))
            {
                int lineNum = 0;
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    lineNum++;
                    string[] fields = line.Split(',');

                    if (lineNum > 1 && fields.Length > 1) // ヘッダー行をスキップし、フィールドが2つ以上ある行のみ処理
                    {
                        string email = fields[1];
                        string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
                        if (!Regex.IsMatch(email, pattern))
                        {
                            Console.WriteLine($"{Path.GetFileName(csvFilePath)}({lineNum}): {email}");
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラーが発生しました: " + ex.Message);
        }
    }
}

メールアドレスのチェックについての補足

メールアドレスをチェックするための正規表現は、メールアドレスが持つ一般的な形式に基づいています。ただし、完璧にすべての有効なメールアドレスを識別し、すべての無効なメールアドレスを排除するのは難しいため、多くの場合は実用的な近似が用いられます。

サンプルコードで使用した正規表現は以下の通りです。

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

この正規表現は次の要素で構成されています。

  1. ^:文字列の始まりを示します。
  2. [a-zA-Z0-9.%+-]+:メールアドレスのローカル部分に使用される一連の文字を示し、一つ以上の文字が必要です。この部分は英数字、ドット (.)、アンダースコア ()、パーセント (%)、プラス (+)、マイナス (-) を含むことができます。
  3. @:メールアドレスのローカル部分とドメイン部分を分離するためのアットマーク (@) です。
  4. [a-zA-Z0-9.-]+:メールアドレスのドメイン部分で使用される文字を示し、一つ以上の文字が必要です。この部分は英数字、ドット (.)、ハイフン (-) を含むことができます。
  5. .[a-zA-Z]{2,}:ドメインの最後にあるドット (.) と、その後に続く2文字以上の英字からなるトップレベルドメイン (TLD) を示します。
  6. $:文字列の終わりを示します。

正しいメールアドレスの例

  • example@email.com:一般的な形式です。
  • user.name@email.co.jp:ドットと複数のドメイン部分が含まれています。
  • user+tag@example.com:プラス記号がローカル部分に含まれています。
  • user_name@example.com:アンダースコアがローカル部分に含まれています。

間違ったメールアドレスの例

  • userexample.com:アットマーク (@) がありません。
  • user@.com:ドメイン部分が不完全です。
  • user@example.c:トップレベルドメインが1文字しかありません。
  • user@com:セカンドレベルドメインが欠けている。
  • user@exam_ple.com:ドメイン部分にアンダースコアが含まれています。
  • user@example..com:ドメイン部分に連続するドットがあります。

この正規表現は多くの一般的なメールアドレスの形式をカバーしていますが、特殊なケースや新しいトップレベルドメインに対応していない場合があります。

また、正規表現は完全なメールアドレスの検証ツールではないため、実際のメールアドレスの検証では追加のチェック(例えば、ドメインの存在確認)が必要になることがあります。

タイトルとURLをコピーしました