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

Can I use Symfony's validation constraint NotEqualTo case insensitive

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

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

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

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

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

NotEqualTo 通过 != 比较它的值。因为'bar' != 'BAR'你不能扭转它。

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

您可能想要扩展 Symfony/Component/Validator/AbstractComparison(已经提供 "value" attribute/property)和相应的验证器。

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

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

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

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

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