我可以使用Symfony的验证约束NotEqualTo不区分大小写吗

时间:2019-04-12 19:38:50

标签: php symfony validation symfony4

我正在尝试使用Symfony的验证约束NotEqualTo来防止使用某些字符串值。

正如documentation所述,使用NotEqualTo约束应该可以做到这一点。 这是有效的,尽管以区分大小写的方式进行。但是,我将需要它以不区分大小写的方式工作。 我可以通过创建自定义约束来解决此问题,但也许我只是忽略了一个更为简单的解决方案。

class Foo
{
    /**
     * @Assert\Length(
     *     min=4,
     *     max=150
     * )
     * @Assert\NotEqualTo(
     *     value="bar"
     * )
     */
    private $name;
}

在此示例中,保留关键字为bar。 Symfony不允许bar,但允许BarBARBaR,...

我可以以不区分大小写的方式使用Symfony的验证约束NotEqualTo吗?

2 个答案:

答案 0 :(得分:1)

NotEqualTo通过!=比较其值。自'bar' != 'BAR'起,您就无法解决它。

但是,您可能可以通过回调函数轻松地添加验证来比较两个值的小写版本。或者您可以编写自己的约束和验证器:https://symfony.com/doc/current/validation/custom_constraint.html

您可能想扩展Symfony/Component/Validator/AbstractComparison(已经提供了“值”属性/属性)和相应的验证器。

本着完全公开的精神:OP找到了解决其问题的更好方法:使用内置的Regex约束(请参见下面的答案)。

答案 1 :(得分:1)

NotEqualTo无法做到这一点,如前所述。

解决问题的一种简单方法是使用字符串约束中的Regex

 /**
  * @Assert\Regex(
  *     pattern="/^(bar)$/i",
  *     match=false,
  *     message="'Bar' is a reserved name",
  * )
  */
 private $name;

也可以创建自己的自定义约束。但是我觉得编写代码并不安全。