正規表現は、電子メール アドレスの構文の有効性を判断するのにはあまり適していません。FILTER_VALIDATE_EMAIL
また、関数のオプションfilter_var
もかなり信頼できません。EmailAddressValidator クラスを使用して、電子メール アドレスの構文をテストします。
filter_var
(PHP バージョン 5.3.2-1ubuntu4.2)によって返される誤った結果の例をいくつかまとめました。おそらくもっとあります。一部は確かに少し極端ですが、それでも注目に値します。
RFC 1035 2.3.1。優先名の構文
http://tools.ietf.org/search/rfc1035
要約: ドメインは、ドット区切り記号で区切られたラベルで構成されます (ただし、ローカル ドメインには必ずしも当てはまりません)。
echo filter_var('name@example', FILTER_VALIDATE_EMAIL);
// name@example
RFC 1035 2.3.1。優先名の構文
ラベルは、ARPANET ホスト名の規則に従う必要があります。文字で始まり、文字または数字で始まり、内部文字として文字、数字、およびハイフンのみを持つ必要があります。
echo filter_var('name@1example.com', FILTER_VALIDATE_EMAIL);
// name@1example
RFC 2822 3.2.5。引用符で囲まれた文字列
https://www.rfc-editor.org/rfc/rfc2822#section-3.2.5
これは有効です (ただし、多くのメール サーバーで拒否されています)。
echo filter_var('name"quoted"string@example', FILTER_VALIDATE_EMAIL);
// FALSE
RFC 5321 4.5.3.1.1。ローカル部分
https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.1
ユーザー名またはその他のローカル部分の最大合計長は 64 オクテットです。
70 文字でテストします。
echo filter_var('AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij@example.com', FILTER_VALIDATE_EMAIL);
// AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij@example.com
RFC 5321 4.5.3.1.2。ドメイン
https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.2
ドメイン名または番号の最大合計長は 255 オクテットです。
260 文字でテストします。
echo filter_var('name@AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com', FILTER_VALIDATE_EMAIL);
// name@AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com
詳細については、正しい方法である PHP を使用して電子メール アドレスを検証するをご覧ください。