1

重複の可能性:
電子メールアドレスを検証するための最良の正規表現は何ですか?

私はこの特定の正規表現を使用してメールをチェックしています。

"^[A-Za-z0-9](([a-zA-Z0-9,=\.!\-#|\$%\^&\*\+/\?_`\{\}~]+)*)@(?:[0-9a-zA-Z-]+\.)+[a-zA-Z]{2,9}$"

私が抱えている問題は、これにより「@」記号の前にピリオドが許可されることです。これが起こらないようにこの式を変更する方法はありますか?それでも他のすべての条件は維持されます。

a。@b.comは無効である必要があります

よろしくお願いします-Rollin

4

5 に答える 5

7

私がこれまでに見た中で最高の答え。正直なところ、使用している言語またはツールセットを示していただければ、正規表現を手作業で作成する方法を説明するのではなく、それを行うライブラリを紹介します。

編集:これが.NET上にあるという追加情報を考えると、私はMailAddressクラスを使用し、次のように正規表現を使用するという考えを完全に放棄します:

public bool IsAddressValid(string text)
{
    try
    {
        MailAddress address = new MailAddress(text);
        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

アドレス自体の検証に加えて追加の要件がある場合 (特定のドメイン セットからのものであることを確認するなど)、アドレスが有効であることを確認した後、はるかに簡単なテストでそれを行うことができます。別投稿

于 2009-08-12T01:55:24.637 に答える
3

奇妙なゲーム。唯一の勝利の動きは、プレーしないことです。

真剣に、正規表現で電子メール アドレスを検証する唯一の方法は、電子メール アドレスを正規表現で検証しないことです。電子メール アドレスを受け入れる文法は規則的ではありません。最新の正規表現がいくつかの非正規文法をサポートできることは事実ですが、それでも、そのような複雑な文法の正規表現を維持することは (ご覧のとおり) ほぼ不可能です。

私が考えることができる電子メールアドレスでの正規表現の唯一の合理的な使用法は、クライアント側で最小限のチェックを行うことです (@ 記号が含まれていますか?)。

あなたがすべきことは次のとおりです。

  1. ユーザーがクリックするリンクが記載された電子メール アドレスに電子メールを送信します。ユーザーがリンクをクリックすると、電子メール アドレスは有効になります。さらに、それは存在し、ユーザーはおそらくあなたのフォームにメールアドレスを入力した人です. これはメール アドレスを 100% 検証するだけでなく、さらに多くの保証を提供します。

  2. 1 ができない場合は、事前にパッケージ化された電子メール検証ツールを使用してください。1 と 2 の両方を使用することをお勧めします。

  3. 1 つまたは 2 つのことができない場合は、実際のパーサーを作成して、電子メール アドレスを検証します。

于 2009-08-12T02:20:14.260 に答える
1

ドット以外のすべての文字を許可するよう[^\.]に、前に置くことができます@

[]もちろん、これはおそらくあなたが望むものではないので、あなたはそれに合法的な文字を入れることができます

@誰かがたった1文字のメール名(つまり、の前の部分)を持っている場合に備えて、|

于 2009-08-12T02:08:33.513 に答える
0

正規表現エンジンにルックビハインドアサーションがある場合は、「@」の前に「(?<!\。)」を追加するだけです。

于 2009-08-12T01:59:50.687 に答える
0

Perlでこれを行っている場合-次のスクリプトは例です

my $string = 'name@domain.com';
if($string =~/(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,9})/)
{
   print "gotcha!";
}
else
{
   print "nope :(";
}

ご覧のとおり、Perl正規表現文字\wはピリオドを適切に処理します。$ stringを「name。@domain.com」に変更すると、失敗します。

于 2009-08-12T02:08:36.993 に答える