Php Symfony验证规则是否随更新而更改?
从Symfony 2.x更新到Symfony 4.x并检查操作后,电子邮件地址的验证规则发生了更改。Php Symfony验证规则是否随更新而更改?,php,symfony,validation,Php,Symfony,Validation,从Symfony 2.x更新到Symfony 4.x并检查操作后,电子邮件地址的验证规则发生了更改。 在Symfony 2.x中,非字母数字单词,如“あ@test.co.jp“被Symfony validation拒绝,但在Symfony 4.x中没有。规则是否随更新而更改? 还有,有没有办法撤销这些规则? 根据我自己的验证规则,我担心我以前使用的电子邮件地址可能会在验证过程中被捕获。 此外,如果删除“@”,您将收到一条验证错误消息“不是有效的电子邮件地址”,因此认为验证本身正在工作 Symfo
在Symfony 2.x中,非字母数字单词,如“あ@test.co.jp“被Symfony validation拒绝,但在Symfony 4.x中没有。规则是否随更新而更改?
还有,有没有办法撤销这些规则?
根据我自己的验证规则,我担心我以前使用的电子邮件地址可能会在验证过程中被捕获。
此外,如果删除“@”,您将收到一条验证错误消息“不是有效的电子邮件地址”,因此认为验证本身正在工作 Symfony 2.x和Symfony 4.x通用的验证规范代码
邮件:
-不空白:~
-电邮:~
基本上2.1只是验证了您的邮件,没有选择如何验证
引入了strict
模式-
如您所见,在此更改之前,Symfony将使用filter\u var()
和filter\u VALIDATE\u EMAIL
。更改后,它用于严格模式
然后使用模式
选项以获得更高的粒度
电子邮件地址的验证是开发人员之间永无休止的争论之一。有些人认为,您无法通过编程方式真正验证它们,您必须始终发送确认电子邮件。其他人则认为,符合RFC5322的编程验证对于现实世界的应用程序来说已经足够了
Symfony始终使用电子邮件验证约束的严格选项来选择此选项。如果为false,则根据简单正则表达式验证电子邮件地址。如果为true,则使用egulias/email validator第三方库完成符合RFC的验证
但是,用于验证电子邮件地址的正则表达式过于简单。这就是为什么在Symfony 4.1中,我们决定开始使用HTML5完成的相同电子邮件验证。实际上,我们已经弃用了strict选项,而选择了新的模式选项
我假设严格模式和使用filter\u var
的2.5版本之前的方法之间存在一些差异
如果您需要保留确切的功能,我认为您需要添加一个使用filter\u var
-类似以下内容:
# src/Validator/FilterVarEmail.php
namespace App\Validator;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class FilterVarEmail extends Constraint
{
public $message = 'Email invalid.';
}
# src/Validator/FilterVarEmailValidator.php
namespace App\Validator;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class FilterVarEmailValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
/* @var $constraint \App\Validator\FilterVarEmail */
if (null === $value || '' === $value) {
return;
}
if (false === filter_var($value, FILTER_VALIDATE_EMAIL)) {
$this->context
->buildViolation($constraint->message)
->addViolation()
;
}
}
}
编辑:也就是说,值得注意的是,电子邮件地址和域名中都允许使用特殊字符,因此,为了证明您的系统是可靠的,您可能希望更改它以支持此功能。
あ@test.co.jp
是。@yivi我知道了,国际规则已经改变了。谢谢你的回答。毕竟发生了变化。这是不是承认应该将strict设置为true以使其类似于2.3?@scottie320不,不幸的是,这不一样。我更新了我的答案,为您提供了更多信息。谢谢。我很明白。自定义验证也很有效,这正是我想要的。