コンマとスペースで区切られた複数の電子メール アドレスを含めることが許可されているフォーム要素を検証したいと考えています。
ここに私が持っているコードがあります:
class My_Validate_EmailAddresses extends Zend_Validate_Abstract
{
const MSG_INVALID = 'msgInvalid';
/** @var Zend_Validate_EmailAddress */
protected static $_validatorEmailAddress;
/** @var array */
protected $_messageTemplates = array(
self::MSG_INVALID => "'%value%' is not a valid email address",
);
/**
*
* @return Zend_Validate_EmailAddress
*/
public static function getValidatorEmailAddress()
{
if (is_null(self::$_validatorEmailAddress)) {
self::$_validatorEmailAddress = new Zend_Validate_EmailAddress();
}
return self::$_validatorEmailAddress;
}
/**
* Values passed in here should be filterd by My_Filter_CommaSpaceSeparated first
*
* @param string $value
* @return boolean
*/
public function isValid($value)
{
$valid = true;
$emails = explode(', ', $value);
foreach ($emails as $email) {
if (!self::getValidatorEmailAddress()->isValid($email)) {
$this->_error(self::MSG_INVALID, $email);
$valid = false;
}
}
return $valid;
}
}
正しく検証されますが、リストに検証されない電子メール アドレスが複数ある場合は、最後のアドレスのエラー メッセージのみが表示されます。無効な電子メール アドレスごとにメッセージが表示されるようにします。