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

时间:2011-02-22 06:33:39

标签: php zend-framework

有哪种方法可以将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的方法,那就太棒了。

1 个答案:

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