Validator EmailAddress可以验证一组电子邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Validator EmailAddress可以验证一组电子邮件相关的知识,希望对你有一定的参考价值。
我有一个select2字段(标签)需要使用Zend框架2中的EmailAddress验证器进行验证。
select2字段的帖子是这样的:
'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',
),
),
),
);
}
就像你看到的那样,我想验证我从表单中获得的所有邮件,所以我explode
我的字符串成一个数组,以循环有效的每个电子邮件。
一个问题我不知道如何以及在何处验证此数组。在这个例子中,我得到错误'invalid type. String expected'
意味着该验证器只接受一封电子邮件。
可以这样做吗?我可以将foreach放入选项回调中以验证我的每封电子邮件吗?
试过:
从我的Fieldset:
$this->add(
array(
'name' => 'emailList',
'type' => 'ZendFormElementEmail',
'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,
)
)
);
我们发誓:
<?=$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>
我试图将类型更改为Zend Form Email,即使这样......没有按预期工作
我得到了以前的错误信息:
- 'test@domain.com,lol' ne correspond pas au format dot-atom - 'test@domain.com,lol' ne correspond pas au format quoted-string - 'test@domain.com,lol' n'est pas une partie locale valide pour l'adresse email
对不起,这是用法语,基本上它说字符串不匹配点原子模式,引用字符串模式和无效的电子邮件地址。但
test@domain.com是第一封电子邮件,lol @ test.com是第二封。所以逗号是个问题
你为什么不接受OOP?为此创建新的验证器:
namespace YourAppValidator;
use ZendValidatorEmailAddress;
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],
],
],
];
}
以上是关于Validator EmailAddress可以验证一组电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
使用 RFC3696 的 EmailValidation(电子邮件地址)
EmailAddress FormatException 不能捕获所有内容
urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress 是有效的 NameID 格式吗?