Zend Framework 2电子邮件和电话验证

时间:2013-08-30 09:52:16

标签: php validation zend-framework2

与电子邮件验证相混淆。在我的模型中,我定义了表单字段的规则。我的问题是我不知道在哪里放Zend\Validator\EmailAddress()规则。在标准的InputFilter中,我有标准的过滤器和验证器,例如:requireminmaxencode等。 ZF2是否支持电话号码验证?

我读过这篇文章,但我不知道如何在我的模型数组getInputFilter()中混合使用EmailAddress规则。我是否需要在控制器中定义电子邮件验证,或者我可以在模型中执行此操作?

http://framework.zend.com/manual/2.0/en/modules/zend.validator.set.html

我的模型使用Zend \ InputFilter \ÍnputFilter,我设置如下规则:

      /**
         * Company Rules
         *
         * @filters
         *      StripTags | StringTrim
         * @validators
         *      StringLenght | UTF-8 encoding | min | max
         */

        $filter->add(array(
                'name' => 'company',
                'required' => true,
                'filters' => array(
                        array('name' => 'StripTags'),
                        array('name' => 'StringTrim'),
                ),
                'validators' => array(
                        array(
                                'name' => 'StringLenght',
                                'options' => array(
                                        'encoding' => 'UTF-8',
                                        'min' => 2,
                                        'max' => 100,
                                ),
                        ),
                ),
        ));

        /**
         * Fax Rules
         *
         * @filters
         *      StripTags | StringTrim | Int
         * @validators
         *      StringLenght | UTF-8 encoding | min | max
         */

        $filter->add(array(
                'name' => 'fax',
                'required' => true,
                'filters' => array(
                        array('name' => 'StripTags'),
                        array('name' => 'StringTrim'),
                ),
                'validators' => array(
                        array(
                                'name' => 'StringLenght',
                                'options' => array(
                                        'encoding' => 'UTF-8',
                                        'min' => 2,
                                        'max' => 100,
                                ),
                        ),
                ),
        ));
    }
}

2 个答案:

答案 0 :(得分:8)

您可以通过以下方式混合使用不同的验证器来编写样式:

'validators' => array(
    array(
        'name'    => 'StringLength',
        'options' => ...
    ),
    new \Zend\Validator\EmailAddress()
),

您还可以使用类似数组的格式指定EmailAddress验证器:

'validators' => array(
    array(
        'name'    => 'StringLength',
        'options' => array(
            'encoding' => 'UTF-8',
                'min' => 2,
                'max' => 100,
             ),
    ),
    array(
        'name' => 'EmailAddress',
    ),
),

关于电话号码的验证,ZF2不提供可供使用的验证器(可能是因为国际电话号码格式之间存在很多差异),但是使用Zend \ Validator \ Regex可以实现一个没有太多工作的验证器。

答案 1 :(得分:0)

这是一种简单且最适合的电子邮件验证方式,至少对我而言

'validators' => array(

               array(

                    'name' => 'EmailAddress',
                    'options' =>array(
                        'domain'   => 'true',
                        'hostname' => 'true',
                        'mx'       => 'true',
                        'deep'     => 'true',
                        'message'  => 'Invalid email address',
                    ),
),