-1

次の正規表現パターン(PHPの場合)は、任意の電子メールアドレスを検証するためのものです。

^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$

大文字および/または小文字の少なくとも1つ(またはそれ以上)、および/またはピリオド、アンダースコアおよび/またはダッシュの後に1つだけの@が続き、その後に少なくとも1つ(またはそれ以上)の大文字および/または小文字、および/またはピリオド、および/またはアンダースコアの後に1つだけのピリオドが続き、その後に2〜6個の大文字および/または小文字が続きます。

これは私が考えることができるどのメールアドレスとも一致するようです。それでも、それを正しくするというこの感覚はおそらく欺瞞的です。知識のある人が、私が気付いていないこのパターンの明らかな、またはそれほど明白ではない脆弱性を指摘してください。これにより、意図したとおりに電子メールの検証が実行されなくなります。

(可能な応答を予測するために、filter_var()関数がより堅牢なソリューションを提供することを認識していますが、この場合の正規表現に特に関心があります。)

注:これは、正規表現のPHPフレーバーに関する理論的な質問であり、電子メールの検証に関する実際的な質問ではありません。この場合、正規表現で合理的に可能なことの限界を判断したいだけです。

前もって感謝します!

4

2 に答える 2

1

正規表現を使用して電子メールを検証するのは難しい

正規表現への入力として次の電子メールを試してください。^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$

abc@b...com

電子メールの正規表現の検証について詳しくは、http://www.regular-expressions.info/email.htmlをご覧ください。

アプリに対してこれを行う場合は、非常に複雑な正規表現を使用するのではなく、指定されたアドレスにメールを送信してメール検証を使用します。

于 2013-02-14T03:55:36.713 に答える
1

メールアドレスの指定はかなりおかしいです。完全な検証を行うことができるregexenがありますが、それらは数千文字の長さです。自分で解析する方が良いかもしれませんが、PHPには電子メールアドレス用の検証ツールが組み込まれています。

filter_var($email, FILTER_VALIDATE_EMAIL);

編集:

失敗する電子メールアドレスの特定の質問に答えて、引用符で囲まれた電子メール名を持っている人は、あなたがそれらをまったく説明していないので、そうします:

"explosion-pills"@aysites.com
于 2013-02-14T03:55:37.917 に答える