有哪种方法可以将Alnum
过滤器用于Zend_Form_Element_Text
表单元素,但仍保留逗号?输入将是项目的命令分隔标记。
我必须定义自己的过滤器吗?有没有办法使用'回调'过滤器类型实现这一点?
预期输入为tag1,tag2,tag3
$tags=new Zend_Form_Element_Text('tags');
$tags->setLabel('Tags:');
$tags->addFilters(array('Alnum','StripTags','StringTrim','HtmlEntities'));
更新1:
Zend_Filter_Alnum有一个允许空格的选项
$tags->addFilters(array('StripTags','StringTrim','HtmlEntities',new Zend_Filter_Alnum(true)));
所以预期的输入将是tag1 tag2 tag3
,但如果有人可以建议我接受tag1,tag2,tag3
的方法,那就太棒了。
答案 0 :(得分:1)
这只是一个例子,它不应该在生产环境中使用:
class My_Filter_AlnumComma implements Zend_Filter_Interface
{
public $allowComma;
public function __construct($allowComma = false)
{
// have a look at a proper filter construct
// and change me
$this->allowComma = (boolean) $allowComma;
}
public function getAllowComma()
{
return $this->allowComma;
}
public function setAllowComma($allowComma)
{
$this->allowComma = (boolean) $allowComma;
return $this;
}
public function filter($value)
{
$comma = $this->allowComma ? ',' : '';
$pattern = '/[^a-zA-Z0-9' . $comma . ']/';
return preg_replace($pattern, '', (string) $value);
}
}