$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'之间,包括在内。
每次在所有情况下都显示相同的消息,即使是空的
答案 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,
),
),
),
)
));