首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法为电子邮件验证设置错误消息-Zend-form

无法为电子邮件验证设置错误消息-Zend-form
EN

Stack Overflow用户
提问于 2010-07-25 04:56:21
回答 3查看 6.5K关注 0票数 1

这很奇怪。我正在尝试为Zend表单中的电子邮件验证元素设置错误消息。其他字段工作正常-但电子邮件不能正常工作-怎么了?

代码位:

代码语言:javascript
复制
$name = new Zend_Form_Element_Text('name');
        $name   ->setLabel('Name:')
                ->setRequired(true)
                ->addValidator('Alnum')
                ->addValidator('NotEmpty');
        $name    ->getValidator('NotEmpty')->setMessage('Please enter your name.');
        $name    ->getValidator('Alnum')->setMessage('Name can only contain letters and spaces.');

$email = new Zend_Form_Element_Text('email');
       $email   ->setLabel('Email:')
             ->setRequired(true)
                ->addFilter('StringToLower')
                ->addValidator('NotEmpty')
                ->addValidator('EmailAddress');

        $email  ->getValidator('NotEmpty')->setMessage('Please enter your email address.');
        $email  ->getValidator('EmailAddress')->setMessage('Email is not in proper format.');

名字可以,但电子邮件不起作用。

我仍然收到默认的错误消息:'' is no valid email address in the basic format local-part@hostname

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-26 23:15:43

您需要指定消息类型:

代码语言:javascript
复制
$email->getValidator('emailAddress')->setMessage("'%value%' is not valid, use something like local-part@hostname",Zend_Validate_EmailAddress::INVALID_FORMAT);

以此为例:

代码语言:javascript
复制
protected $_messageTemplates = array(
        self::INVALID            => "Invalid type given, value should be a string",
        self::INVALID_FORMAT     => "'%value%' is no valid email address in the basic format local-part@hostname",
        self::INVALID_HOSTNAME   => "'%hostname%' is no valid hostname for email address '%value%'",
        self::INVALID_MX_RECORD  => "'%hostname%' does not appear to have a valid MX record for the email address '%value%'",
        self::INVALID_SEGMENT    => "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network.",
        self::DOT_ATOM           => "'%localPart%' can not be matched against dot-atom format",
        self::QUOTED_STRING      => "'%localPart%' can not be matched against quoted-string format",
        self::INVALID_LOCAL_PART => "'%localPart%' is no valid local part for email address '%value%'",
        self::LENGTH_EXCEEDED    => "'%value%' exceeds the allowed length",
    );
票数 6
EN

Stack Overflow用户

发布于 2012-11-09 17:41:06

您需要创建自定义错误类。在我的例子中:

我已经在library/Zend/Validate文件夹中创建了自定义电子邮件验证类

代码语言:javascript
复制
class Zend_Validate_Email extends Zend_Validate_Abstract
{

    const INVALID = 'Email is required';
    protected $_messageTemplates = array(
    self::INVALID => "Invalid Email Address",
   );

     public function isValid($value)
     {
         if(filter_var($value, FILTER_VALIDATE_EMAIL) === false) {
            $this->_error(self::INVALID);
            return false;
        } else {
            // We only check the presence of a dot on the domain part
            $components = explode("@", $value);
            $domain = $components[1];

            if (strpos($domain, ".") === false) {
                $this->_error(self::INVALID);
                return false;
            }

            return true;
        }
     }
}

并在我的表单中用作

代码语言:javascript
复制
$email_validate = new Zend_Validate_Email();

$neValidator = new Zend_Validate_NotEmpty();

$neValidator->setMessage('Please enter email.');

$emailaddress = new Zend_Form_Element_Text('EmailAddress');

$emailaddress->setRequired(true)

          ->setAttrib('size', '30')

          ->addFilter('StripTags')

          ->setAttrib('MaxLength',100)

          ->addValidator($neValidator,TRUE)

              ->addValidator($email_validate,TRUE)

          ->setAttrib('class','textbox')

          ->setDecorators($decorators);

希望能对你有所帮助

票数 0
EN

Stack Overflow用户

发布于 2013-04-19 07:34:33

代码语言:javascript
复制
$email_validate = new Zend_Validate_Email();
$neValidator = new Zend_Validate_NotEmpty();
$neValidator->setMessage('Please enter email.');
$emailaddress = new Zend_Form_Element_Text('EmailAddress');
$emailaddress->setRequired(true)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3326880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档