возникли проблемы с регулярным выражением Zend валидатор для числа - целое число или необязательное число с плавающей точкой - PullRequest
0 голосов
/ 23 ноября 2010

Я бы очень признателен за помощь в этом, это сводило меня с ума.Я пытаюсь проверить числа, представленные в форме Zend либо в виде целых чисел или десятичных знаков (2 знака после запятой) с учетом 0 или 0,00, но не пустые входные данные.

$form->element->addValidator ('regex', false, array(
  'pattern'=>'/^\d+(\d{1,5})?(\.\d{1,2})?$/', 
  'messages'=>array(
   'regexInvalid'=>'required',
   'regexNotMatch'=>'number required')
  )
);

По какой-то причине с плавающей запятой, например 100.00, генерируется следующее сообщение об ошибке проверки: «100.00» содержит символы, которые не являются цифрами; разрешены только цифры ».Сообщение regexNotMatch или сообщение regexInvalid не сгенерировано, что я и ожидал.

Похоже, что это сообщение об ошибке проверки генерируется средством проверки цифр, которое я не вызываю.

Кроме того, пустые входные данные не генерируют никаких сообщений об ошибках валидации.

Если я пытаюсь использовать строку, подобную 'rt67', мое сообщение regexNotMatch отображается правильно.Я использую компоненты Zend без MVC, если это имеет какое-либо значение.

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

Я звонил в валидатор цифр, поэтому проблем с ним не было. Я работал над принятием пустых вводимых данных, просто используя setRequired. Удивительно, что может сделать ночной сон! Однако я был бы признателен, если кто-нибудь знает, почему регулярное выражение принимает пустой ввод.

0 голосов
/ 13 сентября 2011

Добавить

$form->element->setRequired();

для запрета пустых вводов.

Ваш код работает, проверьте другие прикрепленные валидаторы. Я использовал это как

    $this->addElement('text','price', array(
        'label'      => 'Price:',
        'filters'    => array('StringTrim'),
        'required'   => true,
        'requiredSuffix'=>'*',
        'size'       => 10,
        'maxlength'     => 10,
        'validators' => array(
            array('validator' => 'Regex', 'options' => array(
                'pattern'=>'/^\d+(\d{1,5})?(\.\d{1,2})?$/', 
                  'messages'=>array(
                   'regexInvalid'=>'required',
                   'regexNotMatch'=>'number in money format (x.xx) is required')
            ))
        )
    ));    
0 голосов
/ 23 ноября 2010

Почему бы не использовать Zend_Validate_Float и / или Zend_Validate_Int?

...