Symfony2实体验证正则表达式 a-z A-Z 0-9

5

在Symfony2中,是否有一种内置的方法来验证字符串(在我的情况下是用户名和另一个属性)是否符合经典的a-z,A-Z和0-9规则?

如果需要,我是否需要自己编写正则表达式作为自定义验证器?(如果需要,请提示在哪里查找)

2个回答

10
你应该使用本地的Regex验证器,使用方法如下所示,就像使用正则表达式断言注解一样简单。
use Symfony\Component\Validator\Constraints as Assert;

class YourClass
{
   /**
    * @Assert\Regex("/[a-zA-Z0-9]/")
    */        
    protected $yourProperty;
}

您可以通过将match选项设置为false来自定义验证,以确保给定的字符串不匹配。
/**
 * @Assert\Regex(
 *     pattern="/[a-zA-Z0-9]/",
 *     match=false,
 *     message="Your property should match ..."
 * )
 */
protected $yourProperty;

使用注释并不是唯一的方法,您还可以使用YML、XML和PHP,请查看文档,其中包含详细解释的示例,涉及此问题。


3

我之前无法正确运行得到的答案。我认为它缺少了一个重复量词 (+)。即使加上这个,如果有问题的字符在字符串的开头或结尾,它仍然会匹配子字符串,因此我们需要开始 ^ 和结束 $ 限制。我还需要允许破折号和下划线以及字母和数字,因此我的最终模式如下。

 * @Assert\Regex("/^[a-zA-Z0-9\-\_]+$/")

我正在使用Symfony 2.8,所以我不知道正则表达式验证是否有改变,但这似乎不太可能。

一个很好的测试正则表达式模式的资源是regex101.com


限制是一个好主意。之前的例子没有起作用的原因是“match=false”,这会导致验证仅在正则表达式匹配时通过。 - Ryaner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接