在symfony2中是否有內置的方法來驗證經典a-z,A-Z和0-9規則中的字符串(在我的情況下是用戶名和其他屬性)?symfony2實體驗證正則表達式a-z A-Z 0-9
我是否必須在regexp中將自己定義爲自定義驗證器? (如果是的話,暗示在哪裏看的讚賞)
在symfony2中是否有內置的方法來驗證經典a-z,A-Z和0-9規則中的字符串(在我的情況下是用戶名和其他屬性)?symfony2實體驗證正則表達式a-z A-Z 0-9
我是否必須在regexp中將自己定義爲自定義驗證器? (如果是的話,暗示在哪裏看的讚賞)
你應該使用本地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是解決這一問題。
我無法讓以前的答案正常工作。我認爲它缺少重複量詞(+
)。即使如此,如果違規字符位於字符串的開頭或末尾,它將匹配子字符串,因此我們需要開始^
並結束$
限制。我還需要允許破折號和下劃線以及字母和數字,所以我的最終模式看起來像這樣。
* @Assert\Regex("/^[a-zA-Z0-9\-\_]+$/")
我使用的Symfony 2.8,所以我不知道如果正則表達式驗證更改,但它似乎不太可能。
測試正則表達式模式的好資源是regex101.com。
這個限制是個好主意。前面的例子不起作用的原因是'match = false',只有當正則表達式匹配* NOT *時,纔會通過驗證。 – Ryaner
正確的問題是從@craigh – Hpatoio