【问题标题】:symfony2 entity validation regexp a-z A-Z 0-9symfony 实体验证正则表达式 a-z A-Z 0-9
【发布时间】:2013-10-31 08:42:10
【问题描述】:

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

作为自定义验证器,我是否必须自己在正则表达式中编写它? (如果是这样,请提示在哪里看)

【问题讨论】:

    标签: php regex validation symfony


    【解决方案1】:

    你应该使用原生的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,解决了这个问题。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 限制是个好主意。上一个示例不起作用的原因是 'match=false' 仅当正则表达式 NOT 匹配时才会导致验证通过。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多