27.4. メールアドレスの検証

Zend_Validate_Email は、メールアドレスの検証を行います。 このバリデータは、まずメールアドレスを local-part @ hostname に分割し、メールアドレスやホスト名の仕様にあわせて検証します。

基本的な使用法

基本的な使用法は、以下のようになります。

<?php
require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email)) {
    // メールアドレスは正しい形式のようです
} else {
    // 不正な形式なので、理由を表示します
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

これは、メールアドレス $email を検証し、失敗した場合は その原因を表す便利なエラーメッセージを $validator->getMessages() で取得します。

複雑なローカルパート

Zend_Validate_Email は、メールアドレスの検証を RFC2822 にもとづいて行います。たとえば、妥当な形式のメールアドレスとしては bob@domain.combob+jones@domain.us"bob@jones"@domain.com および "bob jones"@domain.com などがあります。 かつて使われていたものの、現在は有効とはみなされないフォーマットもあります (たとえば、メールアドレスに改行文字や "\" を使用するなど)。

さまざまな形式のホスト名の検証

メールアドレスのホスト名部分の検証は、Zend_Validate_Hostname で行います。デフォルトでは、domain.com 形式の DNS ホスト名のみが有効となります。しかし、 IP アドレスやローカルホスト名も有効にしたいこともあるでしょう。 その場合は、Zend_Validate_EmailAddress のインスタンスを作成する際にパラメータを渡さなければなりません。 このパラメータで、認めたいホスト名の形式を指定します。 詳細は Zend_Validate_Hostname を参照ください。 たとえば DNS ホスト名およびローカルホスト名のどちらも許可するには、次のようにします。

<?php
require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL);
if ($validator->isValid($email)) {
    // メールアドレスは正しい形式のようです
} else {
    // 不正な形式なので、理由を表示します
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}