表格中的浮点数验证

时间:2012-06-30 14:12:43

标签: php floating-point zend-form zend-framework2

我正在尝试使用浮点数验证的表单。 验证工作时,它不会让我单击提交按钮,并将显示正确的错误消息。

我正在使用zend框架2,在我的表格中我想要检索酒量。

我正在尝试使用以下代码:

$this->add($factory->createElement(array(
            'name' => 'alcohol_vol',
            'attributes' => array(
                    'label' => 'alcohol vol%:',
                    'filters'    => array('Float'),
                    'type'  => 'text',
                    'required'   => true,
            ),
    )));

这实际上没有做任何事情。如果我输入常规文本,它将通过验证。

我也尝试将类型从'text'更改为'Number'但是它不允许我使用浮点数。它只允许非浮点数:)

3 个答案:

答案 0 :(得分:2)

没有" Float"在ZF2过滤,我想你可能想要的是" Float" Validator,Float Validator可以像这样添加到ZF2表单中:

$this->add($factory->createElement(array(
        'name' => 'alcohol_vol',
        'attributes' => array(
                'label' => 'alcohol vol%:',
                'type'  => 'text',
        ),
)));
$factory = new Zend\InputFilter\Factory();

$this->setInputFilter($factory->createInputFilter(array(
    'alcohol_vol' =>     array(
        'name' => 'alcohol_vol',
        'required' => true,
        'validators' => array(
            array(
                'name' => 'Float',
            ),
        ),
    ),
)));

然后你应该在控制器中验证表单,上面的验证器仍然应该设置为表单。如果输入不是float,则input元素将具有无效消息:

$form->setData($userInputData);
if (!$form->isValid()) {
  $inputFilter = $form->getInputFilter();
  $invalids = $inputFilter->getInvalidInput();
  var_dump($invalids);
  // output: 'abc' does not appear to be a float
}

答案 1 :(得分:1)

我认为你可以使用这个过滤器

new Zend\I18n\Filter\NumberFormat("en_US", NumberFormatter::TYPE_DOUBLE);

答案 2 :(得分:0)

我推荐Zend \ I18n \ Validator \ Float类。用法示例:

$floatInput = new Input('myFloatField');
$floatInput->getValidatorChain()
           ->attach(new \Zend\I18n\Validator\Float());

请参阅: