symfony2实体验证regexp a-z A-Z 0-9

时间:2013-10-31 08:42:10

标签: php regex validation symfony

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

我是否必须在regexp中将其作为自定义验证器编写? (如果是这样,提示要去哪里欣赏)

2 个答案:

答案 0 :(得分:9)

您应该使用原生Regex validator

就像使用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 and PHP,查看解决此问题的documentation,其中包含well explained examples

答案 1 :(得分:2)

我无法让上一个答案正常工作。我认为它缺少重复量词(+)。即使这样,如果违规字符位于字符串的开头或结尾,它也会匹配子字符串,因此我们需要启动^和结束$限制。我还需要允许破折号和下划线以及字母和数字,所以我的最终模式看起来像这样。

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

我正在使用Symfony 2.8,所以我不知道Regex验证是否发生了变化,但似乎不太可能。

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