我想验证一个允许包含多个电子邮件地址的表单元素,用逗号和空格分隔。
这是我的代码:
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;
}
}
它正确验证,但如果列表中有多个电子邮件地址未验证,则仅显示最后一个的错误消息。我希望看到每个无效电子邮件地址的消息。