Php 验证程序EmailAddress可以验证电子邮件数组
我有一个select2字段(标签),需要使用Zend framework 2的EmailAddress validator进行验证 来自select2的帖子字段如下所示:Php 验证程序EmailAddress可以验证电子邮件数组,php,validation,email,zend-framework2,jquery-select2,Php,Validation,Email,Zend Framework2,Jquery Select2,我有一个select2字段(标签),需要使用Zend framework 2的EmailAddress validator进行验证 来自select2的帖子字段如下所示: 'email@domain.com, email2@domain.com' public function getInputFilterSpecification() { return array( 'name' => array( 'r
'email@domain.com, email2@domain.com'
public function getInputFilterSpecification()
{
return array(
'name' => array(
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
),
'emailList' => array(
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
array(
'name' => 'Callback',
'options' => array(
'callback' => function($value) {
if (is_string($value)) {
$value = explode(',', $value);
}
return $value;
},
),
)
),
'validators' => array(
array(
'name' => 'EmailAddress',
),
),
),
);
}
从这里开始,我的表单有一个输入过滤器,如下所示:
'email@domain.com, email2@domain.com'
public function getInputFilterSpecification()
{
return array(
'name' => array(
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
),
'emailList' => array(
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
array(
'name' => 'Callback',
'options' => array(
'callback' => function($value) {
if (is_string($value)) {
$value = explode(',', $value);
}
return $value;
},
),
)
),
'validators' => array(
array(
'name' => 'EmailAddress',
),
),
),
);
}
如您所见,我想验证从表单中获得的所有邮件,因此我将字符串分解成一个数组,用于循环中的每个有效邮件
有一个问题我不知道如何以及在哪里验证这个数组。在本例中,我得到了错误“无效类型”。字符串应为“
”表示此验证器只接受一封电子邮件
有可能做到这一点吗?我可以将foreach放入选项回调中以验证我的每封电子邮件吗
尝试:
从我的字段集:
$this->add(
array(
'name' => 'emailList',
'type' => 'Zend\Form\Element\Email',
'options' => array(
'label' => 'email_list',
'label_attributes' => array(
'class' => 'control-label col-xs-5'
),
),
'attributes' => array(
'class' => 'form-control select-tags col-xs-5 nopadding',
'multiple' => true,
)
)
);
我的vue:
<?=$this->formEmail($reporting->get('emailList'));?>
<p class="col-xs-4 help-block">
<?php
if ($this->formElementErrors($reporting->get('emailList'))) {
echo $this->formElementErrors()
->setMessageOpenFormat('- ')
->setMessageSeparatorString('<br/>- ')
->setMessageCloseString('')
->render($reporting->get('emailList'));
}
?>
</p>
抱歉,它是用法语写的,基本上它说字符串与点原子模式、带引号的字符串模式和无效的电子邮件地址不匹配。但是
test@domain.com是第一封电子邮件,而且lol@test.com这是第二个。所以逗号是个问题你为什么不接受OOP?为此创建新的验证程序:
namespace YourApp\Validator;
use Zend\Validator\EmailAddress;
class EmailAddressList extends EmailAddress
{
public function isValid($value)
{
$emails = array_map('trim', explode(',', $value));
foreach ($emails as $email) {
if (!parent::isValid($email)) {
return false;
}
}
return true;
}
}
在您的验证器规范中:
public function getInputFilterSpecification()
{
return [
// other fields
'emailList' => [
'required' => true,
'validators' => [
['name'=> EmailAddressList::class],
],
],
];
}
Imo将Zend\Form\Element\Email与多个true一起使用。看到@venca我用你的想法编辑了我的帖子,顺便说一句,很好的提示,但似乎我做得不对,或者它没有按预期工作。