29.4. 校验 Email 地址
上一页 | 第 29 章 Zend_Validate | 下一页

## 29.4. 校验 Email 地址

Zend_Validate_Email允许你校验一个email地址。首先校验器把email地址分成local-part和@hostname并试图按照email地址和主机名的规范来匹配它。

基本用法

一个基本用法的例子如下：

    <?php
    require_once 'Zend/Validate/EmailAddress.php';
    $validator = new Zend_Validate_EmailAddress();
    if ($validator->isValid($email)) {
        // email appears to be valid
    } else {
        // email is invalid; print the reasons
        foreach ($validator->getMessages() as $message) {
            echo "$message\n";
        }
    }

这个例子匹配email地址`$email`并在匹配失败的时候用`$validator->getMessages()`来获得有用的错误信息。

复杂的local parts

Zend_Validate_Email根据RFC2822l来匹配任何有效的email地址。例如，有效的email地址包括`bob@domain.com`, `bob+jones@domain.us`, `"bob@jones"@domain.com` 和 `"bob jones"@domain.com`。一些过时的email格式目前不再校验（例如email地址中的回车符或"\"符）。

校验不同类型的主机名

Email地址中的主机名部分依靠Zend_Validate_Hostname来校验。尽管你希望IP地址和本地主机名也被接受，但缺省地只有像`domain.com`格式的DNS主机名被接受。 当然如果你想如愿，需要实例化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)) {
        // email appears to be valid
    } else {
        // email is invalid; print the reasons
        foreach ($validator->getMessages() as $message) {
            echo "$message\n";
        }
    }

上一页 | 上一级 | 下一页
29.3. 写校验器 | 起始页 | 29.5. 校验主机名