0

我真的很感谢一些帮助,这让我发疯了。我正在尝试验证 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 消息会正确显示。

如果这有什么不同,我正在使用没有 mvc 的 zend 组件。

4

3 回答 3

1

我正在调用数字验证器,所以它实际上没有问题。我已经解决了通过简单地使用 setRequired 来接受空输入的问题。晚上睡觉能做什么真是太神奇了!但是,如果有人知道为什么正则表达式接受空输入,我将不胜感激。

于 2010-11-24T12:27:00.807 回答
0

添加

$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')
            ))
        )
    ));    
于 2011-09-13T17:25:59.907 回答
0

为什么不使用 Zend_Validate_Float 和/或 Zend_Validate_Int?

于 2010-11-23T16:00:53.610 回答