如何实现输入过滤和验证

时间:2014-01-16 06:53:04

标签: php zend-framework zend-framework2 user-input

我是zendframework的新手。我正在使用zendframework版本2.

我有一个ClientForm类,它继承自Zend \ Form \ Form。

class Client extends Form
{
    public function __construct($name = null, $options = array())
    {
        if (null == $name) $name = 'ClientFrom';
        parent::__construct($name, $options);

        $this->add(array(
            'name' => 'clientName',
            'type' => 'Text'
        ));

        $this->add(array(
            'name' => 'address1',
            'type' => 'Text'
        ));
    }
}

我需要为上面的表单实现验证和过滤。

验证规则

'clientName' => required, min = 3, max = 25

过滤规则

'clientName' => [a-zA-Z0-9_ ]

问题

  1. 我可以实现此规则并在与Form相同的类中过滤(不创建新的输入过滤器类)
  2. 请告诉我如何在上述课程中实施上述规则的示例。
  3. 谢谢。

3 个答案:

答案 0 :(得分:2)

试试这个:

    $this->add(array(
        'name' => 'clientName',
        'type' => 'text',
        'required' => true,             
        'validators' => array(
             new Validator\RegexValidator('/^#[a-zA-Z0-9_ ]$/'),
             new Validator\StringLength(array('min'=>3 ,'max' => 25))
         )             
    )); 

答案 1 :(得分:1)

您可以使用Zend\InputFilter - 组件来执行此类任务。那里有很多例子,有一些例如here或者herehere等配置文件。

后两个是用于特定Doctrine-Validators的示例,但您也可以将它们用于任何普通的Zend\InputFilter

答案 2 :(得分:0)

我想你自己还没有代码......好吧。

  

'clientName'=>必需,min = 3,max = 25

这个太难了,继承了一些简单的代码...写得非常简单易读,如果你愿意,可以缩短if语句:

if(!empty($clientName)) {
    if(!($clientName > 25)) {
        if(!($clientName < 3)) {
            echo "valid name!";
        }
    }
} else {
    return false;
}
  

'clientName'=&gt; [a-zA-Z0-9_]

您可以使用RegEx或字符串函数,只允许这些特定字符。