Php zend框架-使用';Alnum';过滤但保留逗号

Php zend框架-使用';Alnum';过滤但保留逗号,php,zend-framework,Php,Zend Framework,对于Zend\u Form\u元素\u Text表单元素,是否有一种方法可以使用Alnum过滤器,但仍然保留逗号?输入将是项目的命令分隔标签。 我必须定义自己的过滤器吗?有没有一种方法可以使用“回调”过滤器类型来实现这一点 预期输入为tag1、tag2、tag3 $tags=new Zend_Form_Element_Text('tags'); $tags->setLabel('Tags:'); $tags->addFilters(array('Alnum','StripTags',

对于
Zend\u Form\u元素\u Text
表单元素,是否有一种方法可以使用
Alnum
过滤器,但仍然保留逗号?输入将是项目的命令分隔标签。 我必须定义自己的过滤器吗?有没有一种方法可以使用“回调”过滤器类型来实现这一点

预期输入为
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
,那就太棒了。

这只是一个例子,它不应该像在生产环境中那样使用:

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);
    }
}

扩展Zend_Filter_接口并创建您自己的自定义过滤器,如果您首先查看Zend_Filter_Alnum,最多需要10分钟。这是正确的方法,尽管我会查看Zend_Filter_Alnum()复制这一点,而不是上面的内容,因为ZF类支持unicode和实际字母表,而不仅仅是A-Z。@David Caunt:我知道,但这只是一个例子,如果你查一下我在这个问题上遇到的一些问题,告诉他先看看Zend_Filter_Alnum,看看应该如何做。