1. ホーム
  2. c#

[解決済み】正規表現によるメール検証

2022-04-04 13:59:05

質問

私はこれを使用しています

@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

電子メールを検証するための正規表現

([\w\.\-]+) - これは、第一レベルドメイン(多くの文字と数字、およびポイントとハイフン)用です。

([\w\-]+) - これは第2レベルドメイン用です

((\.(\w){2,3})+) - そして、これは他のレベルドメイン(3から無限大まで)のためのもので、点と2つまたは3つのリテラルを含んでいます。

この正規表現に何か問題があるのでしょうか?

EDIT:it doesn't match the "[email protected]" email

解決方法は?

TLDのような .博物館 はこの方法ではマッチングされませんし、他にも長いTLDがいくつかあります。また、メールアドレスの検証には MailAddressクラス マイクロソフトの説明では こちら をノートで紹介しています。

メールアドレスの検証には、正規表現を使う代わりに は、System.Net.Mail.MailAddress クラスを使用することができます。判断するには メールアドレスが有効かどうか、そのメールアドレスを MailAddress.MailAddress(String)クラスのコンストラクタを使用します。

public bool IsValid(string emailaddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

これにより、正規表現を書く(あるいは他の人が書いたものを理解しようとする)必要がなくなるので、多くの頭痛の種を減らすことができます。

EDIT : アレルギーをお持ちの方へ try/catch : .NET 5 では MailAddress.TryCreate . 以下もご参照ください。 https://stackoverflow.com/a/68198658 .、スペース、.TLD の欠落などを修正する例を含む。