如何使用实体ZF2中的输入过滤器验证手机号码

时间:2015-10-19 18:02:45

标签: php validation zend-framework2 zend-inputfilter

$inputFilter->add($factory->createInput(
    array(
        'name' => 'phone',
        'required' => true,
        'filters' => array(
            array('name' => 'Int'),
        ),
        'validators' => array(
            array(
                'name' => 'Between',
                'options' => array(
                    'min' => 10,
                    'max' => 11,
                ),
            ),
        ),
    )
));

它显示:

  

输入不在'6'和'10'之间,包括在内。

每次在所有情况下都显示相同的消息,即使是空的

2 个答案:

答案 0 :(得分:1)

您希望改为使用the ZF2 StringLength validator

$inputFilter->add($factory->createInput(
    array(
        'name' => 'phone',
        'required' => true,
        'filters' => array(
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'StringLength',
                'options' => array(
                    'min' => 10,
                    'max' => 11,
                ),
            ),
        ),
    )
));

如您所见,我建议在这种情况下将电话号码作为字符串处理。

答案 1 :(得分:0)

当您验证整数时,between选项是您在那里输入的int的值。不是它的长度。

在这种情况下:

55501015不包括在6到10之间。

7是。

您的验证器之间看起来像这样:

public function isValid($value)
    {
        $this->setValue($value);

        if ($this->getInclusive()) {
            if ($this->getMin() > $value || $value > $this->getMax()) {
                $this->error(self::NOT_BETWEEN);
                return false;
            }
        } else {
            if ($this->getMin() >= $value || $value >= $this->getMax()) {
                $this->error(self::NOT_BETWEEN_STRICT);
                return false;
            }
        }

        return true;
    }

不是检查长度,而是检查值。

另外,如果它是空的,你的int的值显然不在6或10之间,所以这对我来说不是问题,如果你想表明价值不能为空你有tu在validatorChain中使用另一个验证器。

你必须把它作为字符串和控件,可能是通过一个自定义验证器,在这个字符串上使用正则表达式,如下所示:

$inputFilter->add($factory->createInput(
    array(
        'name' => 'phone',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'), // don't forget this one
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'StringLength',
                'options' => array(
                    'min' => 10,
                    'max' => 11,
                ),
            ),
        ),
    )
));