2011-09-27 119 views
2

所以,我有一個文本字段只能包含字母,數字,連字符,點和下劃線。我想驗證它使用Zend_Validate_Regex但這種模式不起作用。爲什麼?Zend_Validate_Regex - 只允許字母,數字和字符-_

/[a-z][A-Z][0-9]-_./ 

這是我的文本元素:

$titleSlug = new Zend_Form_Element_Text('title_slug', array(
    'label' => 'Title Slug', 
    'required' => FALSE, 
    'filters' => array(
     'StringTrim', 
     'Null' 
    ), 
    'validators' => array(
     array('StringLength', FALSE, array(3, 255)), 
     array('Regex', FALSE, array('pattern' => '/[a-z][A-Z][0-9]-_./')) 
    ) 
)); 

回答

12

你的正則表達式匹配的字符串,包含小寫字母,大寫字母,數字,短劃線,下劃線和其他任何字符。你需要這個:

/^[\w.-]*$/ 

^$錨匹配字符串的開始和結束。

\w匹配字母,數字和下劃線;連同點和短劃線一起形成一個字符類([...]),它重複零次或多次(*)。

+1

只是爲了我的備份:在我的情況下,同樣的事情不工作,除非我這樣做:'array('variable1'=>'^ [\ w .-] * $')'刪除'/' – YumYumYum

+0

蒂姆的解決方案是工作完美。 YumYumYum,我相信你需要像這個數組一樣使用('regex',true,array('/^[\ w .-] * $/i'))。我還通過添加/ i來修改Tim的正則表達式來忽略該情況 – Vincent

0

這個怎麼樣:

/[a-zA-Z]*|\d*|-*|\.*|_*/ 
+0

單個字符類就足夠了。此外,你需要錨定正則表達式。 –

相關問題