ユーザーの電子メール アドレスを検証する必要があります。残念ながら、標準に準拠したバリデーターを作成するのは困難です。
標準に準拠しようとする正規表現の例を次に示します。
メールアドレスを検証する PHP ライブラリ (できればオープンソース) はありますか?
PHP の filter_ functionsを見たことがありますか? 完璧ではありませんが、私の経験ではかなりまともな仕事をしています。
使用例 (ブール値を返します):
filter_var($someEmail, FILTER_VALIDATE_EMAIL);
私の知る限り、電子メールを検証する唯一の良い方法は、電子メールを送信し、ユーザーがこの電子メールのリンクを使用してサイトに戻るかどうかを確認することです。それが多くのサイトで行われていることです。
よく知られている巨大な正規表現へのリンクで指摘されているように、すべての形式の電子メール アドレスを検証することは困難であり、ほとんど不可能です。些細なスタイルの電子メールであっても、間違いを犯すのはとても簡単です (私はあまりにも多くのサイトが電子メール アドレスの大文字を拒否していることを発見しました! そして、ほとんどの古い正規表現は 4 文字を超える TLD を拒否します!)。
私の知る限り、「Jean-Luc B. O'Grady」@example.com と e=mc^2@[82.128.45.117] はどちらも有効なアドレスです... I-Made-It-Up@Absurd-Domain-Name.情報が無効である可能性があります。
どういうわけか、一意の @ などの何かがあることを確認し、それを使用します。これにより、ほとんどのユーザー エラー (空のフィールドや、電子メール アドレスではなくユーザー名など) が検出されます。
ユーザーが偽のアドレスを提供したい場合は、正しいように見えるランダムなものを提供するだけです (see@on.tv または bill.gates@microsoft.com)。また、タイプミスを検出するバリデータはありません (john.b@example.com ではなく jhon.b@example.com)。
完全な RFC に対して電子メールを本当に検証したい場合は、正規表現を使用して @ を分割し、ローカル名とドメイン名を個別に確認することをお勧めします。
" で始まるローカル名の大文字と小文字を区別するなどもちろん、多くの正規表現の使用に適用されます...
[更新]メールアドレスの検証について知っていることをすべてここにまとめました:http://isemail.info、これでメールアドレスの問題を検証するだけでなく診断することもできます。検証は答えの一部にすぎないというここでのコメントの多くに同意します。http://isemail.info/aboutで私のエッセイを参照してください。
Cal Henderson、Dave Child、Phil Haack、Doug Lovell、RFC3696のテストケースをまとめました。全部で158のテストアドレスです。
見つけたすべてのバリデーターに対してこれらすべてのテストを実行しました。比較はここにあります:http://www.dominicsayers.com/isemail
人々がバリデーターを強化するので、私はこのページを最新の状態に保つように努めます。これらのテストのコンパイルと私自身のバリデーターに対する建設的な批判に協力してくれたCal、Dave、Philに感謝します。
特にRFC3696に対する正誤表に注意する必要があります。正規の例のうち3つは、実際には無効なアドレスです。また、アドレスの最大長は、320文字ではなく254文字または256文字です。
Cal Henderson (Flickr の) はRFC822 準拠の電子メール アドレス マッチャーを書き、RFC の説明と、RFC を利用して電子メール アドレスを照合するコードを示しました。私はかなり長い間それを使用してきましたが、不満はありません。
RFC822 (1982 年発行) は、特にインターネット テキスト メッセージ (電子メール) アドレスの形式を定義しています。グーグルで RFC を見つけることができます。それらの多くのコピーがオンラインにあります。それらは少し簡潔で奇妙にフォーマットされていますが、少し努力すれば、彼らが何を目指しているかを見ることができます。
... アップデート ...
Porgesがコメントで指摘したように、リンクのライブラリは古くなっていますが、そのページには更新されたバージョンへのリンクがあります。
Google コードでライブラリを見つけました: http://code.google.com/p/php-email-address-validation/
他にもありますか?
Zend_Validateには、電子メールバリデーターが含まれています。
検証には、非常に基本的なものから非常に高度なものまで、正規表現がたくさんあります。アプリケーションで有効な電子メールの重要性に一致するものを実際に選択する必要があります。
Zend_Validate_EmailAddress [ source ] のソース コードを確認することをお勧めします。
依存関係を修正したら、次のことを簡単に実行できます。
$mail_validator = new Zend_Validate_EmailAddress();
$mail_validator->isValid($address); // returns true or false
最善の方法は、完全な Zend ライブラリをプロジェクトに取得し、svn external
そのインクルード パスを指定することです...
ただし、必要なファイル ( 1、2、3、4、5、6 ) をダウンロードして、それらをすべて含めることができます ( require_once呼び出しを削除します)。