проверка чисел с плавающей запятой в форме

Я пытаюсь создать форму с проверкой числа с плавающей запятой. когда проверка работает, она не позволит мне нажать кнопку отправки и покажет правильное сообщение об ошибке.

Я использую Zend Framework 2 и в своей форме хочу получить объем алкоголя.

Я пытаюсь использовать следующий код:

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

это ничего не делает на самом деле. он пройдет проверку, если я введу обычный текст.

Я также попытался изменить тип на «Число» с «текста», но тогда это не позволит мне использовать плавающее число. это позволит только не числа с плавающей запятой :)


person ufk    schedule 30.06.2012    source источник
comment
Если валидация не сильно изменилась со времен ZF 1.x, то вам нужен ключ validators, а не filters.   -  person bububaba    schedule 01.07.2012
comment
к сожалению, добавление «Float» в массив валидаторов ничего не изменило.   -  person ufk    schedule 01.07.2012


Ответы (3)


В ZF2 нет фильтра «Float», я думаю, вы можете использовать «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',
            ),
        ),
    ),
)));

Затем вы должны проверить форму в контроллере, указанные выше валидаторы все равно должны быть установлены в форме. Если ввод не плавающий, элемент ввода будет иметь недействительные сообщения:

$form->setData($userInputData);
if (!$form->isValid()) {
  $inputFilter = $form->getInputFilter();
  $invalids = $inputFilter->getInvalidInput();
  var_dump($invalids);
  // output: 'abc' does not appear to be a float
}
person AlloVince    schedule 01.07.2012
comment
Спасибо за информацию. вы позволили мне лучше понять, как работать с валидаторами. проблема в том, что это не добавляет проверки javascript, когда пользователь заполняет форму. это добавляет проверки только после того, как пользователь отправил форму. - person ufk; 02.07.2012

Я думаю, вы можете использовать этот фильтр

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

person runphp    schedule 18.01.2013

Я рекомендую класс Zend\I18n\Validator\Float. Пример использования:

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

Видеть:

person AlexMA    schedule 12.06.2014