2013-10-31 27 views
4

在symfony2中是否有內置的方法來驗證經典a-z,A-Z和0-9規則中的字符串(在我的情況下是用戶名和其他屬性)?symfony2實體驗證正則表達式a-z A-Z 0-9

我是否必須在regexp中將自己定義爲自定義驗證器? (如果是的話,暗示在哪裏看的讚賞)

回答

8

你應該使用本地Regex validator

這是因爲使用正則表達式的簡單斷言註釋如下,

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是解決這一問題。

+0

正確的問題是從@craigh – Hpatoio

1

我無法讓以前的答案正常工作。我認爲它缺少重複量詞(+)。即使如此,如果違規字符位於字符串的開頭或末尾,它將匹配子字符串,因此我們需要開始^並結束$限制。我還需要允許破折號和下劃線以及字母和數字,所以我的最終模式看起來像這樣。

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

我使用的Symfony 2.8,所以我不知道如果正則表達式驗證更改,但它似乎不太可能。

測試正則表達式模式的好資源是regex101.com

+0

這個限制是個好主意。前面的例子不起作用的原因是'match = false',只有當正則表達式匹配* NOT *時,纔會通過驗證。 – Ryaner

相關問題