我可以使用 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
但会允许 Bar
、BAR
、BaR
、...
我可以以不区分大小写的方式使用 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;
也可以创建您自己的自定义约束。但是我觉得不写代码更安全
我正在尝试使用 Symfony 的验证约束 NotEqualTo
来防止使用某个字符串值。
正如 documentation 所述,这应该可以使用 NotEqualTo 约束。 这有效,尽管以区分大小写的方式。但是我需要它也以不区分大小写的方式工作。 我可以通过创建自定义约束来解决这个问题,但也许我只是忽略了一个更琐碎的解决方案。
class Foo
{
/**
* @Assert\Length(
* min=4,
* max=150
* )
* @Assert\NotEqualTo(
* value="bar"
* )
*/
private $name;
}
在此示例中,保留关键字是 bar
。
Symfony 不允许 bar
但会允许 Bar
、BAR
、BaR
、...
我可以以不区分大小写的方式使用 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;
也可以创建您自己的自定义约束。但是我觉得不写代码更安全