Php Symfony验证规则是否随更新而更改?

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更新到Symfony 4.x并检查操作后,电子邮件地址的验证规则发生了更改。
在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不,不幸的是,这不一样。我更新了我的答案,为您提供了更多信息。谢谢。我很明白。自定义验证也很有效,这正是我想要的。