与电子邮件验证相混淆。在我的模型中,我定义了表单字段的规则。我的问题是我不知道在哪里放Zend\Validator\EmailAddress()
规则。在标准的InputFilter中,我有标准的过滤器和验证器,例如:require
,min
,max
,encode
等。 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,
),
),
),
));
}
}
答案 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',
),
),